Browse Source

- reimplemented commands

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/XmlEditor@4156 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Siegfried Pammer 17 years ago
parent
commit
25354e9011
  1. 4
      src/AddIns/BackendBindings/XmlBinding/Configuration/AssemblyInfo.cs
  2. 4
      src/AddIns/BackendBindings/XmlBinding/Src/CodeCompletion/XmlCodeCompletionBinding.cs
  3. 26
      src/AddIns/BackendBindings/XmlBinding/Src/CodeCompletion/XmlCompletionDataImageList.cs
  4. 4
      src/AddIns/BackendBindings/XmlBinding/Src/CodeCompletion/XmlCompletionDataProvider.cs
  5. 2
      src/AddIns/BackendBindings/XmlBinding/Src/CodeCompletion/XmlCompletionItem.cs
  6. 2
      src/AddIns/BackendBindings/XmlBinding/Src/CodeCompletion/XmlCompletionItemCollection.cs
  7. 2
      src/AddIns/BackendBindings/XmlBinding/Src/CodeCompletion/XmlCompletionItemList.cs
  8. 1352
      src/AddIns/BackendBindings/XmlBinding/Src/CodeCompletion/XmlSchemaCompletionData.cs
  9. 294
      src/AddIns/BackendBindings/XmlBinding/Src/CodeCompletion/XmlSchemaCompletionDataCollection.cs
  10. 24
      src/AddIns/BackendBindings/XmlBinding/Src/Commands/AssignStylesheetCommand.cs
  11. 31
      src/AddIns/BackendBindings/XmlBinding/Src/Commands/CreateSchemaCommand.cs
  12. 14
      src/AddIns/BackendBindings/XmlBinding/Src/Commands/FormatXmlCommand.cs
  13. 12
      src/AddIns/BackendBindings/XmlBinding/Src/Commands/GoToSchemaDefinitionCommand.cs
  14. 21
      src/AddIns/BackendBindings/XmlBinding/Src/Commands/OpenStylesheetCommand.cs
  15. 100
      src/AddIns/BackendBindings/XmlBinding/Src/Commands/RunXslTransformCommand.cs
  16. 13
      src/AddIns/BackendBindings/XmlBinding/Src/Commands/ValidateXmlCommand.cs
  17. 2
      src/AddIns/BackendBindings/XmlBinding/Src/Gui/Dialogs/SelectXmlSchema.xaml
  18. 2
      src/AddIns/BackendBindings/XmlBinding/Src/Gui/Dialogs/SelectXmlSchema.xaml.cs
  19. 2
      src/AddIns/BackendBindings/XmlBinding/Src/Gui/Dialogs/XmlEditorOptionsPanel.xaml
  20. 16
      src/AddIns/BackendBindings/XmlBinding/Src/Gui/Dialogs/XmlEditorOptionsPanel.xaml.cs
  21. 2
      src/AddIns/BackendBindings/XmlBinding/Src/Gui/Dialogs/XmlSchemasPanel.xaml
  22. 2
      src/AddIns/BackendBindings/XmlBinding/Src/Gui/Dialogs/XmlSchemasPanel.xaml.cs
  23. 167
      src/AddIns/BackendBindings/XmlBinding/Src/Gui/XPathNodeMatch.cs
  24. 60
      src/AddIns/BackendBindings/XmlBinding/Src/Gui/XPathNodeTextMarker.cs
  25. 95
      src/AddIns/BackendBindings/XmlBinding/Src/Gui/XPathQueryControl.cs
  26. 95
      src/AddIns/BackendBindings/XmlBinding/Src/Gui/XmlAttributePropertyDescriptor.cs
  27. 94
      src/AddIns/BackendBindings/XmlBinding/Src/Gui/XmlAttributeTypeDescriptor.cs
  28. 60
      src/AddIns/BackendBindings/XmlBinding/Src/Gui/XmlCharacterDataTreeNode.cs
  29. 60
      src/AddIns/BackendBindings/XmlBinding/Src/Gui/XmlCommentTreeNode.cs
  30. 16
      src/AddIns/BackendBindings/XmlBinding/Src/Gui/XmlDisplayBinding.cs
  31. 119
      src/AddIns/BackendBindings/XmlBinding/Src/Gui/XmlEditorAddInOptions.cs
  32. 99
      src/AddIns/BackendBindings/XmlBinding/Src/Gui/XmlElementTreeNode.cs
  33. 157
      src/AddIns/BackendBindings/XmlBinding/Src/Gui/XmlSchemaAssociation.cs
  34. 89
      src/AddIns/BackendBindings/XmlBinding/Src/Gui/XmlSchemaAssociationListBoxItem.cs
  35. 61
      src/AddIns/BackendBindings/XmlBinding/Src/Gui/XmlSchemaListBoxItem.cs
  36. 60
      src/AddIns/BackendBindings/XmlBinding/Src/Gui/XmlTextTreeNode.cs
  37. 652
      src/AddIns/BackendBindings/XmlBinding/Src/Gui/XmlTreeEditor.cs
  38. 21
      src/AddIns/BackendBindings/XmlBinding/Src/Gui/XmlTreeView.cs
  39. 924
      src/AddIns/BackendBindings/XmlBinding/Src/Gui/XmlTreeViewContainerControl.cs
  40. 578
      src/AddIns/BackendBindings/XmlBinding/Src/Gui/XmlTreeViewControl.cs
  41. 807
      src/AddIns/BackendBindings/XmlBinding/Src/Gui/XmlView.cs
  42. 66
      src/AddIns/BackendBindings/XmlBinding/Src/Gui/XslOutputView.cs
  43. 4
      src/AddIns/BackendBindings/XmlBinding/Src/Parser/Parser.cs
  44. 2
      src/AddIns/BackendBindings/XmlBinding/Src/Parser/QualifiedName.cs
  45. 2
      src/AddIns/BackendBindings/XmlBinding/Src/Parser/QualifiedNameCollection.cs
  46. 2
      src/AddIns/BackendBindings/XmlBinding/Src/Parser/XmlElementPath.cs
  47. 2
      src/AddIns/BackendBindings/XmlBinding/Src/Parser/XmlParser.cs
  48. 12
      src/AddIns/BackendBindings/XmlBinding/Src/StylesheetAssignedCondition.cs
  49. 2
      src/AddIns/BackendBindings/XmlBinding/Src/XmlFormattingStrategy.cs
  50. 218
      src/AddIns/BackendBindings/XmlBinding/Src/XmlSchemaManager.cs
  51. 26
      src/AddIns/BackendBindings/XmlBinding/XmlBinding.addin
  52. 51
      src/AddIns/BackendBindings/XmlBinding/XmlEditor.csproj
  53. 4
      src/Main/Base/Project/Src/Gui/Dialogs/AbstractOptionPanel.cs
  54. 6
      src/Main/Base/Project/Src/Services/File/OpenedFile.cs
  55. 14
      src/Main/Base/Project/Src/TextEditor/Conditions/TextContentCondition.cs
  56. 2
      src/Main/Base/Project/Src/Util/WpfSynchronizeInvoke.cs
  57. 5
      src/Main/ICSharpCode.Core.Presentation/LocalizeExtension.cs
  58. 284
      src/SharpDevelop.sln

4
src/AddIns/BackendBindings/XmlBinding/Configuration/AssemblyInfo.cs

@ -9,11 +9,11 @@ using System.Runtime.InteropServices; @@ -9,11 +9,11 @@ using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("XmlBinding")]
[assembly: AssemblyTitle("XmlEditor")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("XmlBinding")]
[assembly: AssemblyProduct("XmlEditor")]
[assembly: AssemblyCopyright("Copyright 2009")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

4
src/AddIns/BackendBindings/XmlBinding/Src/CodeCompletion/XmlCodeCompletionBinding.cs

@ -7,11 +7,11 @@ @@ -7,11 +7,11 @@
using System;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.XmlBinding.Parser;
using ICSharpCode.XmlEditor.Parser;
using ICSharpCode.XmlEditor;
using System.IO;
namespace ICSharpCode.XmlBinding
namespace ICSharpCode.XmlEditor
{
/// <summary>
/// Description of XmlCodeCompletionBinding.

26
src/AddIns/BackendBindings/XmlBinding/Src/CodeCompletion/XmlCompletionDataImageList.cs

@ -1,26 +0,0 @@ @@ -1,26 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision: 915 $</version>
// </file>
using System;
using System.Windows.Forms;
namespace ICSharpCode.XmlEditor
{
public class XmlCompletionDataImageList
{
XmlCompletionDataImageList()
{
}
public static ImageList GetImageList()
{
ImageList imageList = new ImageList();
return imageList;
}
}
}

4
src/AddIns/BackendBindings/XmlBinding/Src/CodeCompletion/XmlCompletionDataProvider.cs

@ -5,12 +5,12 @@ @@ -5,12 +5,12 @@
// <version>$Revision: 2760 $</version>
// </file>
using ICSharpCode.XmlBinding;
using ICSharpCode.XmlEditor;
using System;
using System.Windows.Forms;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.XmlBinding.Parser;
using ICSharpCode.XmlEditor.Parser;
namespace ICSharpCode.XmlEditor
{

2
src/AddIns/BackendBindings/XmlBinding/Src/CodeCompletion/XmlCompletionItem.cs

@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
using System;
using ICSharpCode.SharpDevelop.Editor;
namespace ICSharpCode.XmlBinding
namespace ICSharpCode.XmlEditor
{
/// <summary>
/// Holds the text for namespace, child element or attribute

2
src/AddIns/BackendBindings/XmlBinding/Src/CodeCompletion/XmlCompletionItemCollection.cs

@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
// <version>$Revision: 1965 $</version>
// </file>
using ICSharpCode.XmlBinding;
using ICSharpCode.XmlEditor;
using System;
using System.Collections;
using System.Collections.ObjectModel;

2
src/AddIns/BackendBindings/XmlBinding/Src/CodeCompletion/XmlCompletionItemList.cs

@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
using ICSharpCode.SharpDevelop.Editor;
using System;
namespace ICSharpCode.XmlBinding
namespace ICSharpCode.XmlEditor
{
/// <summary>
/// Description of XmlCompletionItemList.

1352
src/AddIns/BackendBindings/XmlBinding/Src/CodeCompletion/XmlSchemaCompletionData.cs

File diff suppressed because one or more lines are too long

294
src/AddIns/BackendBindings/XmlBinding/Src/CodeCompletion/XmlSchemaCompletionDataCollection.cs

@ -0,0 +1,294 @@ @@ -0,0 +1,294 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision: 1965 $</version>
// </file>
using ICSharpCode.XmlEditor;
using System;
using System.Collections.Generic;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Editor;
namespace ICSharpCode.XmlEditor
{
/// <summary>
/// A collection that stores <see cref='XmlSchemaCompletionData'/> objects.
/// </summary>
[Serializable()]
public class XmlSchemaCompletionDataCollection : System.Collections.CollectionBase {
/// <summary>
/// Initializes a new instance of <see cref='XmlSchemaCompletionDataCollection'/>.
/// </summary>
public XmlSchemaCompletionDataCollection()
{
}
/// <summary>
/// Initializes a new instance of <see cref='XmlSchemaCompletionDataCollection'/> based on another <see cref='XmlSchemaCompletionDataCollection'/>.
/// </summary>
/// <param name='val'>
/// A <see cref='XmlSchemaCompletionDataCollection'/> from which the contents are copied
/// </param>
public XmlSchemaCompletionDataCollection(XmlSchemaCompletionDataCollection val)
{
this.AddRange(val);
}
/// <summary>
/// Initializes a new instance of <see cref='XmlSchemaCompletionDataCollection'/> containing any array of <see cref='XmlSchemaCompletionData'/> objects.
/// </summary>
/// <param name='val'>
/// A array of <see cref='XmlSchemaCompletionData'/> objects with which to intialize the collection
/// </param>
public XmlSchemaCompletionDataCollection(XmlSchemaCompletionData[] val)
{
this.AddRange(val);
}
/// <summary>
/// Represents the entry at the specified index of the <see cref='XmlSchemaCompletionData'/>.
/// </summary>
/// <param name='index'>The zero-based index of the entry to locate in the collection.</param>
/// <value>The entry at the specified index of the collection.</value>
/// <exception cref='ArgumentOutOfRangeException'><paramref name='index'/> is outside the valid range of indexes for the collection.</exception>
public XmlSchemaCompletionData this[int index] {
get {
return ((XmlSchemaCompletionData)(List[index]));
}
set {
List[index] = value;
}
}
public ICompletionItemList GetNamespaceCompletionData()
{
XmlCompletionItemList list = new XmlCompletionItemList();
foreach (XmlSchemaCompletionData schema in this) {
XmlCompletionItem completionData = new XmlCompletionItem(schema.NamespaceUri, XmlCompletionItem.DataType.NamespaceUri);
list.Items.Add(completionData);
}
list.SortItems();
return list;
}
/// <summary>
/// Represents the <see cref='XmlSchemaCompletionData'/> entry with the specified namespace URI.
/// </summary>
/// <param name='namespaceUri'>The schema's namespace URI.</param>
/// <value>The entry with the specified namespace URI.</value>
public XmlSchemaCompletionData this[string namespaceUri] {
get {
return GetItem(namespaceUri);
}
}
/// <summary>
/// Adds a <see cref='XmlSchemaCompletionData'/> with the specified value to the
/// <see cref='XmlSchemaCompletionDataCollection'/>.
/// </summary>
/// <param name='val'>The <see cref='XmlSchemaCompletionData'/> to add.</param>
/// <returns>The index at which the new element was inserted.</returns>
/// <seealso cref='XmlSchemaCompletionDataCollection.AddRange'/>
public int Add(XmlSchemaCompletionData val)
{
return List.Add(val);
}
/// <summary>
/// Copies the elements of an array to the end of the <see cref='XmlSchemaCompletionDataCollection'/>.
/// </summary>
/// <param name='val'>
/// An array of type <see cref='XmlSchemaCompletionData'/> containing the objects to add to the collection.
/// </param>
/// <seealso cref='XmlSchemaCompletionDataCollection.Add'/>
public void AddRange(XmlSchemaCompletionData[] val)
{
for (int i = 0; i < val.Length; i++) {
this.Add(val[i]);
}
}
/// <summary>
/// Adds the contents of another <see cref='XmlSchemaCompletionDataCollection'/> to the end of the collection.
/// </summary>
/// <param name='val'>
/// A <see cref='XmlSchemaCompletionDataCollection'/> containing the objects to add to the collection.
/// </param>
/// <seealso cref='XmlSchemaCompletionDataCollection.Add'/>
public void AddRange(XmlSchemaCompletionDataCollection val)
{
for (int i = 0; i < val.Count; i++)
{
this.Add(val[i]);
}
}
/// <summary>
/// Gets a value indicating whether the
/// <see cref='XmlSchemaCompletionDataCollection'/> contains the specified <see cref='XmlSchemaCompletionData'/>.
/// </summary>
/// <param name='val'>The <see cref='XmlSchemaCompletionData'/> to locate.</param>
/// <returns>
/// <see langword='true'/> if the <see cref='XmlSchemaCompletionData'/> is contained in the collection;
/// otherwise, <see langword='false'/>.
/// </returns>
/// <seealso cref='XmlSchemaCompletionDataCollection.IndexOf'/>
public bool Contains(XmlSchemaCompletionData val)
{
return List.Contains(val);
}
/// <summary>
/// Copies the <see cref='XmlSchemaCompletionDataCollection'/> values to a one-dimensional <see cref='Array'/> instance at the
/// specified index.
/// </summary>
/// <param name='array'>The one-dimensional <see cref='Array'/> that is the destination of the values copied from <see cref='XmlSchemaCompletionDataCollection'/>.</param>
/// <param name='index'>The index in <paramref name='array'/> where copying begins.</param>
/// <exception cref='ArgumentException'>
/// <para><paramref name='array'/> is multidimensional.</para>
/// <para>-or-</para>
/// <para>The number of elements in the <see cref='XmlSchemaCompletionDataCollection'/> is greater than
/// the available space between <paramref name='arrayIndex'/> and the end of
/// <paramref name='array'/>.</para>
/// </exception>
/// <exception cref='ArgumentNullException'><paramref name='array'/> is <see langword='null'/>. </exception>
/// <exception cref='ArgumentOutOfRangeException'><paramref name='arrayIndex'/> is less than <paramref name='array'/>'s lowbound. </exception>
/// <seealso cref='Array'/>
public void CopyTo(XmlSchemaCompletionData[] array, int index)
{
List.CopyTo(array, index);
}
/// <summary>
/// Returns the index of a <see cref='XmlSchemaCompletionData'/> in
/// the <see cref='XmlSchemaCompletionDataCollection'/>.
/// </summary>
/// <param name='val'>The <see cref='XmlSchemaCompletionData'/> to locate.</param>
/// <returns>
/// The index of the <see cref='XmlSchemaCompletionData'/> of <paramref name='val'/> in the
/// <see cref='XmlSchemaCompletionDataCollection'/>, if found; otherwise, -1.
/// </returns>
/// <seealso cref='XmlSchemaCompletionDataCollection.Contains'/>
public int IndexOf(XmlSchemaCompletionData val)
{
return List.IndexOf(val);
}
/// <summary>
/// Inserts a <see cref='XmlSchemaCompletionData'/> into the <see cref='XmlSchemaCompletionDataCollection'/> at the specified index.
/// </summary>
/// <param name='index'>The zero-based index where <paramref name='val'/> should be inserted.</param>
/// <param name='val'>The <see cref='XmlSchemaCompletionData'/> to insert.</param>
/// <seealso cref='XmlSchemaCompletionDataCollection.Add'/>
public void Insert(int index, XmlSchemaCompletionData val)
{
List.Insert(index, val);
}
/// <summary>
/// Returns an enumerator that can iterate through the <see cref='XmlSchemaCompletionDataCollection'/>.
/// </summary>
/// <seealso cref='IEnumerator'/>
public new XmlSchemaCompletionDataEnumerator GetEnumerator()
{
return new XmlSchemaCompletionDataEnumerator(this);
}
/// <summary>
/// Removes a specific <see cref='XmlSchemaCompletionData'/> from the <see cref='XmlSchemaCompletionDataCollection'/>.
/// </summary>
/// <param name='val'>The <see cref='XmlSchemaCompletionData'/> to remove from the <see cref='XmlSchemaCompletionDataCollection'/>.</param>
/// <exception cref='ArgumentException'><paramref name='val'/> is not found in the Collection.</exception>
public void Remove(XmlSchemaCompletionData val)
{
List.Remove(val);
}
/// <summary>
/// Gets the schema completion data with the same filename.
/// </summary>
/// <returns><see langword="null"/> if no matching schema found.</returns>
public XmlSchemaCompletionData GetSchemaFromFileName(string fileName)
{
foreach (XmlSchemaCompletionData schema in this) {
if (FileUtility.IsEqualFileName(schema.FileName, fileName)) {
return schema;
}
}
return null;
}
/// <summary>
/// Enumerator that can iterate through a XmlSchemaCompletionDataCollection.
/// </summary>
/// <seealso cref='IEnumerator'/>
/// <seealso cref='XmlSchemaCompletionDataCollection'/>
/// <seealso cref='XmlSchemaCompletionData'/>
public class XmlSchemaCompletionDataEnumerator : System.Collections.IEnumerator
{
System.Collections.IEnumerator baseEnumerator;
System.Collections.IEnumerable temp;
/// <summary>
/// Initializes a new instance of <see cref='XmlSchemaCompletionDataEnumerator'/>.
/// </summary>
public XmlSchemaCompletionDataEnumerator(XmlSchemaCompletionDataCollection mappings)
{
this.temp = ((System.Collections.IEnumerable)(mappings));
this.baseEnumerator = temp.GetEnumerator();
}
/// <summary>
/// Gets the current <see cref='XmlSchemaCompletionData'/> in the <seealso cref='XmlSchemaCompletionDataCollection'/>.
/// </summary>
public XmlSchemaCompletionData Current {
get {
return ((XmlSchemaCompletionData)(baseEnumerator.Current));
}
}
object System.Collections.IEnumerator.Current {
get {
return baseEnumerator.Current;
}
}
/// <summary>
/// Advances the enumerator to the next <see cref='XmlSchemaCompletionData'/> of the <see cref='XmlSchemaCompletionDataCollection'/>.
/// </summary>
public bool MoveNext()
{
return baseEnumerator.MoveNext();
}
/// <summary>
/// Sets the enumerator to its initial position, which is before the first element in the <see cref='XmlSchemaCompletionDataCollection'/>.
/// </summary>
public void Reset()
{
baseEnumerator.Reset();
}
}
XmlSchemaCompletionData GetItem(string namespaceUri)
{
XmlSchemaCompletionData matchedItem = null;
foreach(XmlSchemaCompletionData item in this)
{
if (item.NamespaceUri == namespaceUri) {
matchedItem = item;
break;
}
}
return matchedItem;
}
}
}

24
src/AddIns/BackendBindings/XmlBinding/Src/Commands/AssignStylesheetCommand.cs

@ -5,9 +5,11 @@ @@ -5,9 +5,11 @@
// <version>$Revision: -1 $</version>
// </file>
using ICSharpCode.SharpDevelop.Gui;
using System;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.XmlEditor.Gui;
namespace ICSharpCode.XmlEditor
{
@ -19,19 +21,17 @@ namespace ICSharpCode.XmlEditor @@ -19,19 +21,17 @@ namespace ICSharpCode.XmlEditor
{
public override void Run()
{
throw new NotImplementedException();
// Get active xml document.
// XmlView xmlView = XmlView.ActiveXmlView;
// if (xmlView != null) {
//
// // Prompt user for filename.
// string stylesheetFileName = BrowseForStylesheetFile();
//
// // Assign stylesheet.
// if (stylesheetFileName != null) {
// xmlView.StylesheetFileName = stylesheetFileName;
// }
// }
XmlView properties = XmlView.ForView(WorkbenchSingleton.Workbench.ActiveViewContent);
if (properties != null) {
// Prompt user for filename.
string stylesheetFileName = BrowseForStylesheetFile();
// Assign stylesheet.
if (stylesheetFileName != null)
properties.StylesheetFileName = stylesheetFileName;
}
}
public static string BrowseForStylesheetFile()

31
src/AddIns/BackendBindings/XmlBinding/Src/Commands/CreateSchemaCommand.cs

@ -5,10 +5,12 @@ @@ -5,10 +5,12 @@
// <version>$Revision: -1 $</version>
// </file>
using ICSharpCode.XmlEditor.Gui;
using System;
using System.IO;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Gui;
namespace ICSharpCode.XmlEditor
{
@ -17,26 +19,21 @@ namespace ICSharpCode.XmlEditor @@ -17,26 +19,21 @@ namespace ICSharpCode.XmlEditor
/// </summary>
public class CreateSchemaCommand : AbstractMenuCommand
{
public CreateSchemaCommand()
{
}
public override void Run()
{
// Find active XmlView.
throw new NotImplementedException();
// XmlView xmlView = XmlView.ActiveXmlView;
// if (xmlView != null) {
// // Create a schema based on the xml.
// string[] schemas = xmlView.InferSchema();
// if (schemas != null) {
// // Create a new file for each generated schema.
// for (int i = 0; i < schemas.Length; ++i) {
// string fileName = GenerateSchemaFileName(xmlView.TextEditorControl.FileName, i + 1);
// OpenNewXmlFile(fileName, schemas[i]);
// }
// }
// }
XmlView properties = XmlView.ForView(WorkbenchSingleton.Workbench.ActiveViewContent);
if (properties != null) {
// Create a schema based on the xml.
string[] schemas = properties.InferSchema();
if (schemas != null) {
// Create a new file for each generated schema.
for (int i = 0; i < schemas.Length; ++i) {
string fileName = GenerateSchemaFileName(properties.File.FileName, i + 1);
OpenNewXmlFile(fileName, schemas[i]);
}
}
}
}
/// <summary>

14
src/AddIns/BackendBindings/XmlBinding/Src/Commands/FormatXmlCommand.cs

@ -5,8 +5,10 @@ @@ -5,8 +5,10 @@
// <version>$Revision: -1 $</version>
// </file>
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Gui;
using System;
using ICSharpCode.Core;
using ICSharpCode.XmlEditor.Gui;
namespace ICSharpCode.XmlEditor
{
@ -18,11 +20,11 @@ namespace ICSharpCode.XmlEditor @@ -18,11 +20,11 @@ namespace ICSharpCode.XmlEditor
public override void Run()
{
// Find active XmlView.
throw new NotImplementedException();
// XmlView xmlView = XmlView.ActiveXmlView;
// if (xmlView != null) {
// xmlView.FormatXml();
// }
XmlView properties = XmlView.ForView(WorkbenchSingleton.Workbench.ActiveViewContent);
if (properties != null) {
properties.FormatXml();
}
}
}
}

12
src/AddIns/BackendBindings/XmlBinding/Src/Commands/GoToSchemaDefinitionCommand.cs

@ -5,8 +5,10 @@ @@ -5,8 +5,10 @@
// <version>$Revision: -1 $</version>
// </file>
using ICSharpCode.SharpDevelop.Gui;
using System;
using ICSharpCode.Core;
using ICSharpCode.XmlEditor.Gui;
namespace ICSharpCode.XmlEditor
{
@ -19,11 +21,11 @@ namespace ICSharpCode.XmlEditor @@ -19,11 +21,11 @@ namespace ICSharpCode.XmlEditor
{
public override void Run()
{
throw new NotImplementedException();
// XmlView view = XmlView.ActiveXmlView;
// if (view != null) {
// view.GoToSchemaDefinition();
// }
XmlView properties = XmlView.ForView(WorkbenchSingleton.Workbench.ActiveViewContent);
if (properties != null) {
properties.GoToSchemaDefinition();
}
}
}
}

21
src/AddIns/BackendBindings/XmlBinding/Src/Commands/OpenStylesheetCommand.cs

@ -8,6 +8,8 @@ @@ -8,6 +8,8 @@
using System;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.XmlEditor.Gui;
namespace ICSharpCode.XmlEditor
{
@ -18,17 +20,14 @@ namespace ICSharpCode.XmlEditor @@ -18,17 +20,14 @@ namespace ICSharpCode.XmlEditor
{
public override void Run()
{
throw new NotImplementedException();
// XmlView xmlView = XmlView.ActiveXmlView;
// if (xmlView != null) {
// if (xmlView.StylesheetFileName != null) {
// try {
// FileService.OpenFile(xmlView.StylesheetFileName);
// } catch (Exception ex) {
// MessageService.ShowError(ex);
// }
// }
// }
XmlView properties = XmlView.ForView(WorkbenchSingleton.Workbench.ActiveViewContent);
if (properties != null && properties.StylesheetFileName != null) {
try {
FileService.OpenFile(properties.StylesheetFileName);
} catch (Exception ex) {
MessageService.ShowError(ex);
}
}
}
}
}

100
src/AddIns/BackendBindings/XmlBinding/Src/Commands/RunXslTransformCommand.cs

@ -5,11 +5,13 @@ @@ -5,11 +5,13 @@
// <version>$Revision: 2313 $</version>
// </file>
using ICSharpCode.SharpDevelop.Editor;
using System;
using System.IO;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.XmlEditor.Gui;
namespace ICSharpCode.XmlEditor
{
@ -26,64 +28,58 @@ namespace ICSharpCode.XmlEditor @@ -26,64 +28,58 @@ namespace ICSharpCode.XmlEditor
/// </summary>
public override void Run()
{
throw new NotImplementedException();
// XmlView xmlView = XmlView.ActiveXmlView;
// if (xmlView != null) {
//
// if (xmlView is XslOutputView) {
// return;
// }
//
// // Check to see if this view is actually a referenced stylesheet.
// if (!string.IsNullOrEmpty(xmlView.PrimaryFileName)) {
//
// XmlView associatedXmlView = GetAssociatedXmlView(xmlView.PrimaryFileName);
// if (associatedXmlView != null) {
// LoggingService.Debug("Using associated xml view.");
// xmlView = associatedXmlView;
// }
// }
//
// // Assign a stylesheet.
// if (xmlView.StylesheetFileName == null) {
// xmlView.StylesheetFileName = AssignStylesheetCommand.BrowseForStylesheetFile();
// }
//
// if (xmlView.StylesheetFileName != null) {
// try {
// xmlView.RunXslTransform(GetStylesheetContent(xmlView.StylesheetFileName));
// } catch (Exception ex) {
// MessageService.ShowError(ex);
// }
// }
// }
XmlView properties = XmlView.ForView(WorkbenchSingleton.Workbench.ActiveViewContent);
if (properties != null) {
// Check to see if this view is actually a referenced stylesheet.
if (!string.IsNullOrEmpty(properties.File.FileName)) {
XmlView assocFile = GetAssociatedXmlView(properties.File.FileName);
if (assocFile != null) {
LoggingService.Debug("Using associated xml file.");
properties = assocFile;
}
}
// Assign a stylesheet.
if (properties.StylesheetFileName == null) {
properties.StylesheetFileName = AssignStylesheetCommand.BrowseForStylesheetFile();
}
if (properties.StylesheetFileName != null) {
try {
properties.RunXslTransform(GetStylesheetContent(properties.StylesheetFileName));
} catch (Exception ex) {
MessageService.ShowError(ex);
}
}
}
}
// /// <summary>
// /// Gets the xml view that is currently referencing the
// /// specified stylesheet view.
// /// </summary>
// XmlView GetAssociatedXmlView(string stylesheetFileName)
// {
// foreach (IViewContent content in WorkbenchSingleton.Workbench.ViewContentCollection) {
// XmlView view = content as XmlView;
// if (view != null && view.StylesheetFileName != null) {
// if (FileUtility.IsEqualFileName(view.StylesheetFileName, stylesheetFileName)) {
// return view;
// }
// }
// }
// return null;
// }
/// <summary>
/// Gets the xml view that is currently referencing the
/// specified stylesheet view.
/// </summary>
XmlView GetAssociatedXmlView(string stylesheetFileName)
{
foreach (IViewContent content in WorkbenchSingleton.Workbench.ViewContentCollection) {
XmlView prop = XmlView.ForView(content);
if (prop != null && !string.IsNullOrEmpty(prop.StylesheetFileName)) {
if (FileUtility.IsEqualFileName(prop.StylesheetFileName, stylesheetFileName)) {
return prop;
}
}
}
return null;
}
string GetStylesheetContent(string fileName)
{
throw new NotImplementedException();
// File already open?
// XmlView view = FileService.GetOpenFile(fileName) as XmlView;
// if (view != null) {
// return view.Text;
// }
ITextEditorProvider view = FileService.GetOpenFile(fileName) as ITextEditorProvider;
if (view != null) {
return view.TextEditor.Document.Text;
}
// Read in file contents.
StreamReader reader = new StreamReader(fileName, true);

13
src/AddIns/BackendBindings/XmlBinding/Src/Commands/ValidateXmlCommand.cs

@ -5,8 +5,10 @@ @@ -5,8 +5,10 @@
// <version>$Revision: 1965 $</version>
// </file>
using ICSharpCode.SharpDevelop.Gui;
using System;
using ICSharpCode.Core;
using ICSharpCode.XmlEditor.Gui;
namespace ICSharpCode.XmlEditor
{
@ -21,12 +23,11 @@ namespace ICSharpCode.XmlEditor @@ -21,12 +23,11 @@ namespace ICSharpCode.XmlEditor
public override void Run()
{
// Find active XmlView.
throw new NotImplementedException();
// XmlView xmlView = XmlView.ActiveXmlView;
// if (xmlView != null) {
// // Validate the xml.
// xmlView.ValidateXml();
// }
XmlView properties = XmlView.ForView(WorkbenchSingleton.Workbench.ActiveViewContent);
if (properties != null) {
// Validate the xml.
properties.ValidateXml();
}
}
}
}

2
src/AddIns/BackendBindings/XmlBinding/Src/Gui/Dialogs/SelectXmlSchema.xaml

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
<Window x:Class="ICSharpCode.XmlBinding.Gui.Dialogs.SelectXmlSchema"
<Window x:Class="ICSharpCode.XmlEditor.Gui.Dialogs.SelectXmlSchema"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sd="http://icsharpcode.net/sharpdevelop/core"

2
src/AddIns/BackendBindings/XmlBinding/Src/Gui/Dialogs/SelectXmlSchema.xaml.cs

@ -12,7 +12,7 @@ using System.Windows.Media; @@ -12,7 +12,7 @@ using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace ICSharpCode.XmlBinding.Gui.Dialogs
namespace ICSharpCode.XmlEditor.Gui.Dialogs
{
/// <summary>
/// Interaction logic for SelectXmlSchema.xaml

2
src/AddIns/BackendBindings/XmlBinding/Src/Gui/Dialogs/XmlEditorOptionsPanel.xaml

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
<gui:AbstractOptionPanel x:Class="ICSharpCode.XmlBinding.Gui.Dialogs.XmlEditorOptionsPanel"
<gui:AbstractOptionPanel x:Class="ICSharpCode.XmlEditor.Gui.Dialogs.XmlEditorOptionsPanel"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:sd="http://icsharpcode.net/sharpdevelop/core"
xmlns:gui="clr-namespace:ICSharpCode.SharpDevelop.Gui;assembly=ICSharpCode.SharpDevelop"

16
src/AddIns/BackendBindings/XmlBinding/Src/Gui/Dialogs/XmlEditorOptionsPanel.xaml.cs

@ -14,7 +14,7 @@ using System.Windows.Shapes; @@ -14,7 +14,7 @@ using System.Windows.Shapes;
using ICSharpCode.SharpDevelop;
using ICSharpCode.XmlEditor;
namespace ICSharpCode.XmlBinding.Gui.Dialogs
namespace ICSharpCode.XmlEditor.Gui.Dialogs
{
/// <summary>
/// Interaction logic for XmlEditorOptionsPanel.xaml
@ -25,19 +25,5 @@ namespace ICSharpCode.XmlBinding.Gui.Dialogs @@ -25,19 +25,5 @@ namespace ICSharpCode.XmlBinding.Gui.Dialogs
{
InitializeComponent();
}
public override void LoadOptions()
{
}
public override bool SaveOptions()
{
base.SaveOptions();
XmlEditorAddInOptions.ShowAttributesWhenFolded = chkShowAttributesWhenFolded.IsChecked == true;
XmlEditorAddInOptions.ShowSchemaAnnotation = chkShowSchemaAnnotation.IsChecked == true;
return true;
}
}
}

2
src/AddIns/BackendBindings/XmlBinding/Src/Gui/Dialogs/XmlSchemasPanel.xaml

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
<UserControl x:Class="ICSharpCode.XmlBinding.Gui.Dialogs.XmlSchemasPanel"
<UserControl x:Class="ICSharpCode.XmlEditor.Gui.Dialogs.XmlSchemasPanel"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:sd="http://icsharpcode.net/sharpdevelop/core"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

2
src/AddIns/BackendBindings/XmlBinding/Src/Gui/Dialogs/XmlSchemasPanel.xaml.cs

@ -10,7 +10,7 @@ using ICSharpCode.SharpDevelop; @@ -10,7 +10,7 @@ using ICSharpCode.SharpDevelop;
using ICSharpCode.XmlEditor;
using Microsoft.Win32;
namespace ICSharpCode.XmlBinding.Gui.Dialogs
namespace ICSharpCode.XmlEditor.Gui.Dialogs
{
/// <summary>
/// Interaction logic for XmlSchemasPanel.xaml

167
src/AddIns/BackendBindings/XmlBinding/Src/Gui/XPathNodeMatch.cs

@ -0,0 +1,167 @@ @@ -0,0 +1,167 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision: 1662 $</version>
// </file>
using System;
using System.Xml;
using System.Xml.XPath;
namespace ICSharpCode.XmlEditor
{
/// <summary>
/// Stores an XmlNode and its associated line number and position after an
/// XPath query has been evaluated.
/// </summary>
public class XPathNodeMatch : IXmlLineInfo
{
int? lineNumber;
int linePosition;
string value;
string displayValue;
XPathNodeType nodeType;
/// <summary>
/// Creates an XPathNodeMatch from the navigator which should be position on the
/// node.
/// </summary>
/// <remarks>
/// We deliberately use the OuterXml when we find a Namespace since the
/// navigator location returned starts from the xmlns attribute.
/// </remarks>
public XPathNodeMatch(XPathNavigator currentNavigator)
{
SetLineNumbers(currentNavigator as IXmlLineInfo);
nodeType = currentNavigator.NodeType;
switch (nodeType) {
case XPathNodeType.Text:
SetTextValue(currentNavigator);
break;
case XPathNodeType.Comment:
SetCommentValue(currentNavigator);
break;
case XPathNodeType.Namespace:
SetNamespaceValue(currentNavigator);
break;
case XPathNodeType.Element:
SetElementValue(currentNavigator);
break;
case XPathNodeType.ProcessingInstruction:
SetProcessingInstructionValue(currentNavigator);
break;
case XPathNodeType.Attribute:
SetAttributeValue(currentNavigator);
break;
default:
value = currentNavigator.LocalName;
displayValue = value;
break;
}
}
/// <summary>
/// Line numbers are zero based.
/// </summary>
public int LineNumber {
get {
return lineNumber.GetValueOrDefault(0);
}
}
/// <summary>
/// Line positions are zero based.
/// </summary>
public int LinePosition {
get {
return linePosition;
}
}
public bool HasLineInfo()
{
return lineNumber.HasValue;
}
/// <summary>
/// Gets the text value of the node.
/// </summary>
public string Value {
get {
return value;
}
}
/// <summary>
/// Gets the node display value. This includes the angle brackets if it is
/// an element, for example.
/// </summary>
public string DisplayValue {
get {
return displayValue;
}
}
public XPathNodeType NodeType {
get {
return nodeType;
}
}
void SetElementValue(XPathNavigator navigator)
{
value = navigator.Name;
if (navigator.IsEmptyElement) {
displayValue = String.Concat("<", value, "/>");
} else {
displayValue = String.Concat("<", value, ">");
}
}
void SetTextValue(XPathNavigator navigator)
{
value = navigator.Value;
displayValue = value;
}
void SetCommentValue(XPathNavigator navigator)
{
value = navigator.Value;
displayValue = navigator.OuterXml;
}
void SetNamespaceValue(XPathNavigator navigator)
{
value = navigator.OuterXml;
displayValue = value;
}
void SetProcessingInstructionValue(XPathNavigator navigator)
{
value = navigator.Name;
displayValue = navigator.OuterXml;
}
void SetAttributeValue(XPathNavigator navigator)
{
value = navigator.Name;
displayValue = String.Concat("@", value);
}
/// <summary>
/// Takes one of the xml line number so the numbers are now zero
/// based instead of one based.
/// </summary>
/// <remarks>A namespace query (e.g. //namespace::*) will return
/// a line info of -1, -1 for the xml namespace. Which looks like
/// a bug in the XPathDocument class.</remarks>
void SetLineNumbers(IXmlLineInfo lineInfo)
{
if (lineInfo.HasLineInfo() && lineInfo.LineNumber > 0) {
lineNumber = lineInfo.LineNumber - 1;
linePosition = lineInfo.LinePosition - 1;
}
}
}
}

60
src/AddIns/BackendBindings/XmlBinding/Src/Gui/XPathNodeTextMarker.cs

@ -0,0 +1,60 @@ @@ -0,0 +1,60 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision: 1965 $</version>
// </file>
using System;
using System.Drawing;
namespace ICSharpCode.XmlEditor
{
/*
/// <summary>
/// A text marker for an XPath query match.
/// </summary>
public class XPathNodeTextMarker : TextMarker
{
public static readonly Color MarkerBackColor = Color.FromArgb(159, 255, 162);
public XPathNodeTextMarker(int offset, XPathNodeMatch node) : base(offset, node.Value.Length, TextMarkerType.SolidBlock, MarkerBackColor)
{
}
/// <summary>
/// Adds markers for each XPathNodeMatch.
/// </summary>
public static void AddMarkers(MarkerStrategy markerStrategy, XPathNodeMatch[] nodes)
{
foreach (XPathNodeMatch node in nodes) {
AddMarker(markerStrategy, node);
}
}
/// <summary>
/// Adds a single marker for the XPathNodeMatch.
/// </summary>
public static void AddMarker(MarkerStrategy markerStrategy, XPathNodeMatch node)
{
if (node.HasLineInfo() && node.Value.Length > 0) {
LineSegment lineSegment = markerStrategy.Document.GetLineSegment(node.LineNumber);
markerStrategy.AddMarker(new XPathNodeTextMarker(lineSegment.Offset + node.LinePosition, node));
}
}
/// <summary>
/// Removes all the XPathNodeMarkers from the marker strategy.
/// </summary>
public static void RemoveMarkers(MarkerStrategy markerStrategy)
{
markerStrategy.RemoveAll(IsXPathNodeTextMarkerMatch);
}
static bool IsXPathNodeTextMarkerMatch(TextMarker marker)
{
return marker is XPathNodeTextMarker;
}
}
*/
}

95
src/AddIns/BackendBindings/XmlBinding/Src/Gui/XPathQueryControl.cs

@ -5,6 +5,7 @@ @@ -5,6 +5,7 @@
// <version>$Revision: -1 $</version>
// </file>
using ICSharpCode.XmlEditor.Gui;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
@ -12,17 +13,17 @@ using System.Threading; @@ -12,17 +13,17 @@ using System.Threading;
using System.Windows.Forms;
using System.Xml;
using System.Xml.XPath;
using ICSharpCode.Core;
using ICSharpCode.Core.WinForms;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Gui;
namespace ICSharpCode.XmlEditor
{
public class XPathQueryControl : System.Windows.Forms.UserControl, IMementoCapable
{
{
const int ErrorImageIndex = 0;
const string NamespacesProperty = "Namespaces";
const string PrefixColumnWidthProperty = "NamespacesDataGridView.PrefixColumn.Width";
@ -174,14 +175,15 @@ namespace ICSharpCode.XmlEditor @@ -174,14 +175,15 @@ namespace ICSharpCode.XmlEditor
public void RemoveXPathNodeTextMarkers()
{
foreach (IViewContent view in WorkbenchSingleton.Workbench.ViewContentCollection) {
ITextEditorControlProvider textEditorProvider = view as ITextEditorControlProvider;
ITextEditorProvider textEditorProvider = view as ITextEditorProvider;
if (textEditorProvider != null) {
// TODO : markers are currently not supported in AvalonEdit.
// XPathNodeTextMarker.RemoveMarkers(textEditorProvider.TextEditorControl.Document.MarkerStrategy);
// textEditorProvider.TextEditorControl.Refresh();
}
}
}
/// <summary>
/// Disposes resources used by the control.
/// </summary>
@ -241,8 +243,8 @@ namespace ICSharpCode.XmlEditor @@ -241,8 +243,8 @@ namespace ICSharpCode.XmlEditor
//
// xPathComboBox
//
this.xPathComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.xPathComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.xPathComboBox.FormattingEnabled = true;
this.xPathComboBox.Location = new System.Drawing.Point(55, 3);
this.xPathComboBox.Name = "xPathComboBox";
@ -265,9 +267,9 @@ namespace ICSharpCode.XmlEditor @@ -265,9 +267,9 @@ namespace ICSharpCode.XmlEditor
//
// tabControl
//
this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tabControl.Controls.Add(this.xPathResultsTabPage);
this.tabControl.Controls.Add(this.namespacesTabPage);
this.tabControl.Location = new System.Drawing.Point(0, 30);
@ -290,8 +292,8 @@ namespace ICSharpCode.XmlEditor @@ -290,8 +292,8 @@ namespace ICSharpCode.XmlEditor
// xPathResultsListView
//
this.xPathResultsListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.matchColumnHeader,
this.lineColumnHeader});
this.matchColumnHeader,
this.lineColumnHeader});
this.xPathResultsListView.Dock = System.Windows.Forms.DockStyle.Fill;
this.xPathResultsListView.FullRowSelect = true;
this.xPathResultsListView.HideSelection = false;
@ -337,8 +339,8 @@ namespace ICSharpCode.XmlEditor @@ -337,8 +339,8 @@ namespace ICSharpCode.XmlEditor
//
this.namespacesDataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.namespacesDataGridView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.prefixColumn,
this.namespaceColumn});
this.prefixColumn,
this.namespaceColumn});
this.namespacesDataGridView.Dock = System.Windows.Forms.DockStyle.Fill;
this.namespacesDataGridView.Location = new System.Drawing.Point(3, 3);
this.namespacesDataGridView.MultiSelect = false;
@ -401,8 +403,7 @@ namespace ICSharpCode.XmlEditor @@ -401,8 +403,7 @@ namespace ICSharpCode.XmlEditor
void UpdateQueryButtonState()
{
throw new NotImplementedException();
// queryButton.Enabled = IsXPathQueryEntered && XmlView.IsXmlViewActive;
queryButton.Enabled = IsXPathQueryEntered && XmlDisplayBinding.XmlViewContentActive;
}
bool IsXPathQueryEntered {
@ -418,39 +419,39 @@ namespace ICSharpCode.XmlEditor @@ -418,39 +419,39 @@ namespace ICSharpCode.XmlEditor
void RunXPathQuery()
{
throw new NotImplementedException();
// XmlView view = XmlView.ActiveXmlView;
// if (view == null) {
// return;
// }
//
// try {
// MarkerStrategy markerStrategy = view.TextEditorControl.Document.MarkerStrategy;
// fileName = view.PrimaryFileName;
//
// // Clear previous XPath results.
// ClearResults();
// XPathNodeTextMarker.RemoveMarkers(markerStrategy);
//
// // Run XPath query.
// XPathNodeMatch[] nodes = view.SelectNodes(xPathComboBox.Text, GetNamespaces());
// if (nodes.Length > 0) {
// AddXPathResults(nodes);
// XPathNodeTextMarker.AddMarkers(markerStrategy, nodes);
// } else {
// AddNoXPathResult();
// }
// AddXPathToHistory();
// } catch (XPathException xpathEx) {
// AddErrorResult(xpathEx);
// } catch (XmlException xmlEx) {
// AddErrorResult(xmlEx);
// } finally {
// BringResultsTabToFront();
// view.TextEditorControl.Refresh();
// }
XmlView properties = XmlView.ForView(WorkbenchSingleton.Workbench.ActiveViewContent);
if (properties == null) {
return;
}
try {
// TODO : markers are currently not supported in AvalonEdit.
//MarkerStrategy markerStrategy = view.GetTextEditor().Document.MarkerStrategy;
fileName = properties.File.FileName;
// Clear previous XPath results.
ClearResults();
//XPathNodeTextMarker.RemoveMarkers(markerStrategy);
// Run XPath query.
XPathNodeMatch[] nodes = properties.SelectNodes(xPathComboBox.Text, GetNamespaces());
if (nodes.Length > 0) {
AddXPathResults(nodes);
//XPathNodeTextMarker.AddMarkers(markerStrategy, nodes);
} else {
AddNoXPathResult();
}
AddXPathToHistory();
} catch (XPathException xpathEx) {
AddErrorResult(xpathEx);
} catch (XmlException xmlEx) {
AddErrorResult(xmlEx);
} finally {
BringResultsTabToFront();
//view.TextEditorControl.Refresh();
}
}
void ClearResults()
{
xPathResultsListView.Items.Clear();

95
src/AddIns/BackendBindings/XmlBinding/Src/Gui/XmlAttributePropertyDescriptor.cs

@ -0,0 +1,95 @@ @@ -0,0 +1,95 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision: 1965 $</version>
// </file>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Xml;
namespace ICSharpCode.XmlEditor
{
/// <summary>
/// Property descriptor for an XmlAttribute. This is used when displaying
/// an XmlAttribute in the property grid.
/// </summary>
public class XmlAttributePropertyDescriptor : PropertyDescriptor
{
XmlAttribute xmlAttribute;
public XmlAttributePropertyDescriptor(XmlAttribute xmlAttribute)
: base(xmlAttribute.LocalName, new Attribute[0])
{
this.xmlAttribute = xmlAttribute;
}
/// <summary>
/// Gets the property descriptors for the specified attributes.
/// </summary>
public static PropertyDescriptorCollection GetProperties(XmlAttributeCollection xmlAttributes)
{
List<PropertyDescriptor> properties = new List<PropertyDescriptor>();
foreach (XmlAttribute xmlAttribute in xmlAttributes) {
properties.Add(new XmlAttributePropertyDescriptor(xmlAttribute));
}
return new PropertyDescriptorCollection(properties.ToArray());
}
public override Type ComponentType {
get {
return typeof(String);
}
}
public override bool IsReadOnly {
get {
return false;
}
}
/// <summary>
/// Returns the property type in this case a string.
/// </summary>
public override Type PropertyType {
get {
return typeof(String);
}
}
public override bool CanResetValue(object component)
{
return false;
}
/// <summary>
/// Gets the value of the xml attribute.
/// </summary>
public override object GetValue(object component)
{
return xmlAttribute.Value;
}
public override void ResetValue(object component)
{
}
/// <summary>
/// Sets the xml attribute value.
/// </summary>
public override void SetValue(object component, object value)
{
xmlAttribute.Value = (String)value;
}
/// <summary>
/// If the current value has changed from the default value then this
/// method will return true.
/// </summary>
public override bool ShouldSerializeValue(object component)
{
return true;
}
}
}

94
src/AddIns/BackendBindings/XmlBinding/Src/Gui/XmlAttributeTypeDescriptor.cs

@ -0,0 +1,94 @@ @@ -0,0 +1,94 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision: 1965 $</version>
// </file>
using System;
using System.ComponentModel;
using System.Xml;
namespace ICSharpCode.XmlEditor
{
/// <summary>
/// Type descriptor that allows us to display properties in the property grid
/// for Xml attributes.
/// </summary>
public class XmlAttributeTypeDescriptor : ICustomTypeDescriptor
{
PropertyDescriptorCollection properties;
public XmlAttributeTypeDescriptor(XmlAttributeCollection xmlAttributes)
{
if (xmlAttributes != null) {
properties = XmlAttributePropertyDescriptor.GetProperties(xmlAttributes);
} else {
properties = new PropertyDescriptorCollection(new XmlAttributePropertyDescriptor[0]);
}
}
public AttributeCollection GetAttributes()
{
return null;
}
public string GetClassName()
{
return null;
}
public string GetComponentName()
{
return null;
}
public TypeConverter GetConverter()
{
return null;
}
public EventDescriptor GetDefaultEvent()
{
return null;
}
public PropertyDescriptor GetDefaultProperty()
{
return null;
}
public object GetEditor(Type editorBaseType)
{
return null;
}
public EventDescriptorCollection GetEvents()
{
return null;
}
public EventDescriptorCollection GetEvents(Attribute[] attributes)
{
return null;
}
public PropertyDescriptorCollection GetProperties()
{
return GetProperties(new Attribute[0]);
}
public PropertyDescriptorCollection GetProperties(Attribute[] attributes)
{
return properties;
}
/// <summary>
/// Returns this class instance.
/// </summary>
public object GetPropertyOwner(PropertyDescriptor pd)
{
return this;
}
}
}

60
src/AddIns/BackendBindings/XmlBinding/Src/Gui/XmlCharacterDataTreeNode.cs

@ -0,0 +1,60 @@ @@ -0,0 +1,60 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision: 2128 $</version>
// </file>
using System;
using System.Xml;
using ICSharpCode.SharpDevelop.Gui;
namespace ICSharpCode.XmlEditor
{
/// <summary>
/// Base class for XmlTextTreeNodes and XmlCommentTreeNodes
/// </summary>
public abstract class XmlCharacterDataTreeNode : ExtTreeNode
{
XmlCharacterData characterData;
public XmlCharacterDataTreeNode(XmlCharacterData characterData)
{
this.characterData = characterData;
}
/// <summary>
/// Updates the display text based on changes in the
/// XmlCharacterData's InnerText associated with this node.
/// </summary>
public void Update()
{
Text = GetDisplayText(characterData.InnerText);
}
/// <summary>
/// Gets the text to display for this tree node.
/// </summary>
/// <remarks>If the text is a single line then it is returned, but
/// trimmed. If the text has multiple lines then the first line that
/// is not empty is returned. This line may have "..." appended to indicate
/// there is more text for this node that is not being displayed. The
/// "..." will be appended only if there are multiple lines containing
/// text.</remarks>
static string GetDisplayText(string s)
{
string[] lines = s.Trim().Split('\n');
for (int i = 0; i < lines.Length; ++i) {
string line = lines[i].Trim();
if (line.Length > 0) {
if (lines.Length == 1) {
return line;
} else {
return String.Concat(line, "...");
}
}
}
return String.Empty;
}
}
}

60
src/AddIns/BackendBindings/XmlBinding/Src/Gui/XmlCommentTreeNode.cs

@ -0,0 +1,60 @@ @@ -0,0 +1,60 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision: 2164 $</version>
// </file>
using System;
using System.Xml;
using ICSharpCode.SharpDevelop.Gui;
namespace ICSharpCode.XmlEditor
{
/// <summary>
/// Represents an xml comment in the tree.
/// </summary>
public class XmlCommentTreeNode : XmlCharacterDataTreeNode
{
public const string XmlCommentTreeNodeImageKey = "XmlCommentTreeNodeImage";
public const string XmlCommentTreeNodeGhostImageKey = "XmlCommentTreeNodeGhostImage";
XmlComment comment;
public XmlCommentTreeNode(XmlComment comment)
: base(comment)
{
this.comment = comment;
ImageKey = XmlCommentTreeNodeImageKey;
SelectedImageKey = ImageKey;
Update();
}
/// <summary>
/// Gets the XmlComment associated with this tree node.
/// </summary>
public XmlComment XmlComment {
get {
return comment;
}
}
/// <summary>
/// Gets or sets whether to show the ghost image which is
/// displayed when cutting the node.
/// </summary>
public bool ShowGhostImage {
get {
return ImageKey == XmlCommentTreeNodeGhostImageKey;
}
set {
if (value) {
ImageKey = XmlCommentTreeNodeGhostImageKey;
} else {
ImageKey = XmlCommentTreeNodeImageKey;
}
SelectedImageKey = ImageKey;
}
}
}
}

16
src/AddIns/BackendBindings/XmlBinding/Src/Gui/XmlDisplayBinding.cs

@ -5,15 +5,16 @@ @@ -5,15 +5,16 @@
// <version>$Revision: -1 $</version>
// </file>
using ICSharpCode.XmlEditor;
using ICSharpCode.SharpDevelop.Editor;
using System;
using System.Collections.Generic;
using System.IO;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.XmlEditor;
namespace ICSharpCode.XmlBinding.Gui
namespace ICSharpCode.XmlEditor.Gui
{
/// <summary>
/// Display binding for the xml editor.
@ -66,6 +67,7 @@ namespace ICSharpCode.XmlBinding.Gui @@ -66,6 +67,7 @@ namespace ICSharpCode.XmlBinding.Gui
// // Did not find the XmlFoldingParser so default to those files defined by the
// // HighlightingManager.
// TODO : not supported in AvalonEdit
// IHighlightingStrategy strategy = HighlightingManager.Manager.FindHighlighter("XML");
// if (strategy != null) {
// return strategy.Extensions;
@ -80,5 +82,15 @@ namespace ICSharpCode.XmlBinding.Gui @@ -80,5 +82,15 @@ namespace ICSharpCode.XmlBinding.Gui
new XmlTreeView(viewContent)
}).ToArray();
}
public static bool XmlViewContentActive {
get {
ITextEditorProvider view = WorkbenchSingleton.Workbench.ActiveViewContent as ITextEditorProvider;
if (view != null)
return IsFileNameHandled(view.TextEditor.FileName);
return false;
}
}
}
}

119
src/AddIns/BackendBindings/XmlBinding/Src/Gui/XmlEditorAddInOptions.cs

@ -0,0 +1,119 @@ @@ -0,0 +1,119 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision: 1965 $</version>
// </file>
using System;
using System.Diagnostics;
using ICSharpCode.Core;
namespace ICSharpCode.XmlEditor
{
/// <summary>
/// The Xml Editor add-in options.
/// </summary>
public static class XmlEditorAddInOptions
{
public static readonly string OptionsProperty = "XmlEditor.AddIn.Options";
public static readonly string ShowAttributesWhenFoldedPropertyName = "ShowAttributesWhenFolded";
public static readonly string ShowSchemaAnnotationPropertyName = "ShowSchemaAnnotation";
static Properties properties;
static XmlEditorAddInOptions()
{
properties = PropertyService.Get(OptionsProperty, new Properties());
}
static Properties Properties {
get {
Debug.Assert(properties != null);
return properties;
}
}
public static event PropertyChangedEventHandler PropertyChanged {
add { Properties.PropertyChanged += value; }
remove { Properties.PropertyChanged -= value; }
}
#region Properties
/// <summary>
/// Gets an association between a schema and a file extension.
/// </summary>
/// <remarks>
/// <para>The property will be an xml element when the SharpDevelopProperties.xml
/// is read on startup. The property will be a schema association
/// if the user changes the schema associated with the file
/// extension in tools->options.</para>
/// <para>The normal way of doing things is to
/// pass the GetProperty method a default value which auto-magically
/// turns the xml element into a schema association so we would not
/// have to check for both. In this case, however, I do not want
/// a default saved to the SharpDevelopProperties.xml file unless the user
/// makes a change using Tools->Options.</para>
/// <para>If we have a file extension that is currently missing a default
/// schema then if we ship the schema at a later date the association will
/// be updated by the code if the user has not changed the settings themselves.
/// </para>
/// <para>For example, the initial release of the xml editor add-in had
/// no default schema for .xsl files, by default it was associated with
/// no schema and this setting is saved if the user ever viewed the settings
/// in the tools->options dialog. Now, after the initial release the
/// .xsl schema was created and shipped with SharpDevelop, there is
/// no way to associate this schema to .xsl files by default since
/// the property exists in the SharpDevelopProperties.xml file.</para>
/// <para>An alternative way of doing this might be to have the
/// config info in the schema itself, which a special SharpDevelop
/// namespace. I believe this is what Visual Studio does. This
/// way is not as flexible since it requires the user to locate
/// the schema and change the association manually.</para>
/// </remarks>
public static XmlSchemaAssociation GetSchemaAssociation(string extension)
{
extension = extension.ToLower();
string property = Properties.Get("ext" + extension, String.Empty);
XmlSchemaAssociation association = null;
if (property.Length > 0) {
association = XmlSchemaAssociation.ConvertFromString(property);
}
// Use default?
if (association == null) {
association = XmlSchemaAssociation.GetDefaultAssociation(extension);
}
return association;
}
public static void SetSchemaAssociation(XmlSchemaAssociation association)
{
Properties.Set("ext" + association.Extension, association.ConvertToString());
}
public static bool ShowAttributesWhenFolded {
get {
return Properties.Get(ShowAttributesWhenFoldedPropertyName, false);
}
set {
Properties.Set(ShowAttributesWhenFoldedPropertyName, value);
}
}
public static bool ShowSchemaAnnotation {
get {
return Properties.Get(ShowSchemaAnnotationPropertyName, true);
}
set {
Properties.Set(ShowSchemaAnnotationPropertyName, value);
}
}
#endregion
}
}

99
src/AddIns/BackendBindings/XmlBinding/Src/Gui/XmlElementTreeNode.cs

@ -0,0 +1,99 @@ @@ -0,0 +1,99 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision: 2164 $</version>
// </file>
using System;
using System.Xml;
using ICSharpCode.SharpDevelop.Gui;
namespace ICSharpCode.XmlEditor
{
/// <summary>
/// Represents an XmlElement in the Xml Tree.
/// </summary>
public class XmlElementTreeNode : ExtTreeNode
{
public const string XmlElementTreeNodeImageKey = "XmlElementTreeNodeImage";
public const string XmlElementTreeNodeGhostImageKey = "XmlElementTreeNodeGhostImage";
XmlElement element;
public XmlElementTreeNode(XmlElement element)
{
this.element = element;
Text = GetDisplayText(element);
Tag = element;
ImageKey = XmlElementTreeNodeImageKey;
if (element.HasChildNodes) {
// Add dummy node so that the tree node can be
// expanded in the tree view.
Nodes.Add(new ExtTreeNode());
}
}
/// <summary>
/// Gets the XmlElement associated with this tree node.
/// </summary>
public XmlElement XmlElement {
get {
return element;
}
}
/// <summary>
/// Gets or sets whether to show the ghost image which is
/// displayed when cutting the node.
/// </summary>
public bool ShowGhostImage {
get {
return ImageKey == XmlElementTreeNodeGhostImageKey;
}
set {
if (value) {
ImageKey = XmlElementTreeNodeGhostImageKey;
} else {
ImageKey = XmlElementTreeNodeImageKey;
}
SelectedImageKey = ImageKey;
}
}
/// <summary>
/// Adds child elements to this tree node.
/// </summary>
protected override void Initialize()
{
Nodes.Clear();
foreach (XmlNode childNode in element.ChildNodes) {
XmlElement childElement = childNode as XmlElement;
XmlText text = childNode as XmlText;
XmlComment comment = childNode as XmlComment;
if (childElement != null) {
XmlElementTreeNode treeNode = new XmlElementTreeNode(childElement);
treeNode.AddTo(this);
} else if (text != null) {
XmlTextTreeNode treeNode = new XmlTextTreeNode(text);
treeNode.AddTo(this);
} else if (comment != null) {
XmlCommentTreeNode treeNode = new XmlCommentTreeNode(comment);
treeNode.AddTo(this);
}
}
}
/// <summary>
/// Gets the tree node's text for the element.
/// </summary>
static string GetDisplayText(XmlElement element)
{
if (element.Prefix.Length > 0) {
return String.Concat(element.Prefix, ":", element.LocalName);
}
return element.LocalName;
}
}
}

157
src/AddIns/BackendBindings/XmlBinding/Src/Gui/XmlSchemaAssociation.cs

@ -0,0 +1,157 @@ @@ -0,0 +1,157 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision: 1965 $</version>
// </file>
using System;
namespace ICSharpCode.XmlEditor
{
/// <summary>
/// Represents an association between an xml schema and a file extension.
/// </summary>
public class XmlSchemaAssociation //: IXmlConvertable
{
string namespaceUri = String.Empty;
string extension = String.Empty;
string namespacePrefix = String.Empty;
public XmlSchemaAssociation(string extension)
: this(extension, String.Empty, String.Empty)
{
}
public XmlSchemaAssociation(string extension, string namespaceUri)
: this(extension, namespaceUri, String.Empty)
{
}
public XmlSchemaAssociation(string extension, string namespaceUri, string namespacePrefix)
{
this.extension = extension;
this.namespaceUri = namespaceUri;
this.namespacePrefix = namespacePrefix;
}
public string NamespaceUri {
get {
return namespaceUri;
}
set {
namespaceUri = value;
}
}
/// <summary>
/// Gets or sets the file extension (e.g. '.xml').
/// </summary>
public string Extension {
get {
return extension;
}
set {
extension = value;
}
}
/// <summary>
/// Gets or sets the default namespace prefix that will be added
/// to the xml elements.
/// </summary>
public string NamespacePrefix {
get {
return namespacePrefix;
}
set {
namespacePrefix = value;
}
}
/// <summary>
/// Gets the default schema association for the file extension.
/// </summary>
/// <remarks>
/// These defaults are hard coded.
/// </remarks>
public static XmlSchemaAssociation GetDefaultAssociation(string extension)
{
XmlSchemaAssociation association = null;
switch (extension.ToLowerInvariant()) {
case ".wxs":
association = new XmlSchemaAssociation(extension, @"http://schemas.microsoft.com/wix/2003/01/wi");
break;
case ".config":
association = new XmlSchemaAssociation(extension, @"urn:app-config");
break;
case ".build":
association = new XmlSchemaAssociation(extension, @"http://nant.sf.net/release/0.85/nant.xsd");
break;
case ".addin":
association = new XmlSchemaAssociation(extension, @"http://www.icsharpcode.net/2005/addin");
break;
case ".xsl":
case ".xslt":
association = new XmlSchemaAssociation(extension, @"http://www.w3.org/1999/XSL/Transform", "xsl");
break;
case ".xsd":
association = new XmlSchemaAssociation(extension, @"http://www.w3.org/2001/XMLSchema", "xs");
break;
case ".manifest":
association = new XmlSchemaAssociation(extension, @"urn:schemas-microsoft-com:asm.v1");
break;
case ".xaml":
association = new XmlSchemaAssociation(extension, @"http://schemas.microsoft.com/winfx/avalon/2005");
break;
default:
association = new XmlSchemaAssociation(extension);
break;
}
return association;
}
/// <summary>
/// Two schema associations are considered equal if their file extension,
/// prefix and namespaceUri are the same.
/// </summary>
public override bool Equals(object obj)
{
bool equals = false;
XmlSchemaAssociation rhs = obj as XmlSchemaAssociation;
if (rhs != null) {
if ((this.namespacePrefix == rhs.namespacePrefix) &&
(this.extension == rhs.extension) &&
(this.namespaceUri == rhs.namespaceUri)) {
equals = true;
}
}
return equals;
}
public override int GetHashCode()
{
return (namespaceUri != null ? namespaceUri.GetHashCode() : 0) ^ (extension != null ? extension.GetHashCode() : 0) ^ (namespacePrefix != null ? namespacePrefix.GetHashCode() : 0);
}
/// <summary>
/// Creates an XmlSchemaAssociation from the saved xml.
/// </summary>
public static XmlSchemaAssociation ConvertFromString(string text)
{
string[] parts = text.Split(new char[] {'|'}, 3);
return new XmlSchemaAssociation(parts[0], parts[1], parts[2]);
}
public string ConvertToString()
{
return extension + "|" + namespaceUri + "|" + namespacePrefix;
}
}
}

89
src/AddIns/BackendBindings/XmlBinding/Src/Gui/XmlSchemaAssociationListBoxItem.cs

@ -0,0 +1,89 @@ @@ -0,0 +1,89 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision: 1965 $</version>
// </file>
using System;
namespace ICSharpCode.XmlEditor
{
/// <summary>
/// Represents list box item showing the association between an xml schema
/// and a file extension.
/// </summary>
public class XmlSchemaAssociationListBoxItem
{
bool isDirty = false;
string namespaceUri = String.Empty;
string extension = String.Empty;
string namespacePrefix = String.Empty;
public XmlSchemaAssociationListBoxItem(string extension, string namespaceUri, string namespacePrefix)
{
this.extension = extension;
this.namespaceUri = namespaceUri;
this.namespacePrefix = namespacePrefix;
}
/// <summary>
/// Gets or sets whether this association has been changed by the user.
/// </summary>
public bool IsDirty {
get {
return isDirty;
}
set {
isDirty = value;
}
}
public string NamespaceUri {
get {
return namespaceUri;
}
set {
namespaceUri = value;
}
}
/// <summary>
/// Gets or sets the file extension (e.g. '.xml').
/// </summary>
public string Extension {
get {
return extension;
}
set {
extension = value;
}
}
/// <summary>
/// Gets or sets the default namespace prefix that will be added
/// to the xml elements.
/// </summary>
public string NamespacePrefix {
get {
return namespacePrefix;
}
set {
namespacePrefix = value;
}
}
/// <summary>
/// Returns the file extension so this can be sorted in a list box.
/// </summary>
/// <returns></returns>
public override string ToString()
{
return extension;
}
}
}

61
src/AddIns/BackendBindings/XmlBinding/Src/Gui/XmlSchemaListBoxItem.cs

@ -0,0 +1,61 @@ @@ -0,0 +1,61 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision: 915 $</version>
// </file>
using System;
using System.Windows.Controls;
using System.Windows.Media;
namespace ICSharpCode.XmlEditor
{
/// <summary>
/// A schema item shown in the tools options dialog.
/// </summary>
public class XmlSchemaListBoxItem
{
string namespaceUri = String.Empty;
bool readOnly = false;
/// <summary>
/// Creates a new list box item.
/// </summary>
/// <remarks>
/// A readonly list box item is used for system schemas, those that
/// are installed with SharpDevelop.
/// </remarks>
public XmlSchemaListBoxItem(string namespaceUri, bool readOnly)
{
this.namespaceUri = namespaceUri;
this.readOnly = readOnly;
}
public XmlSchemaListBoxItem(string namespaceUri)
: this(namespaceUri, false)
{
}
public string NamespaceUri {
get {
return namespaceUri;
}
}
public bool ReadOnly {
get {
return readOnly;
}
}
/// <summary>
/// Returns the namespace Uri so the list box item is sorted correctly.
/// </summary>
/// <returns></returns>
public override string ToString()
{
return namespaceUri;
}
}
}

60
src/AddIns/BackendBindings/XmlBinding/Src/Gui/XmlTextTreeNode.cs

@ -0,0 +1,60 @@ @@ -0,0 +1,60 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision: 2164 $</version>
// </file>
using System;
using System.Xml;
using ICSharpCode.SharpDevelop.Gui;
namespace ICSharpCode.XmlEditor
{
/// <summary>
/// Represents an XmlText node in the tree.
/// </summary>
public class XmlTextTreeNode : XmlCharacterDataTreeNode
{
public const string XmlTextTreeNodeImageKey = "XmlTextTreeNodeImage";
public const string XmlTextTreeNodeGhostImageKey = "XmlTextTreeNodeGhostImage";
XmlText xmlText;
public XmlTextTreeNode(XmlText xmlText)
: base(xmlText)
{
this.xmlText = xmlText;
ImageKey = XmlTextTreeNodeImageKey;
SelectedImageKey = ImageKey;
Update();
}
/// <summary>
/// Gets the XmlText associated with this tree node.
/// </summary>
public XmlText XmlText {
get {
return xmlText;
}
}
/// <summary>
/// Gets or sets whether to show the ghost image which is
/// displayed when cutting the node.
/// </summary>
public bool ShowGhostImage {
get {
return ImageKey == XmlTextTreeNodeGhostImageKey;
}
set {
if (value) {
ImageKey = XmlTextTreeNodeGhostImageKey;
} else {
ImageKey = XmlTextTreeNodeImageKey;
}
SelectedImageKey = ImageKey;
}
}
}
}

652
src/AddIns/BackendBindings/XmlBinding/Src/Gui/XmlTreeEditor.cs

File diff suppressed because one or more lines are too long

21
src/AddIns/BackendBindings/XmlBinding/Src/Gui/XmlTreeView.cs

@ -14,7 +14,7 @@ using ICSharpCode.Core.WinForms; @@ -14,7 +14,7 @@ using ICSharpCode.Core.WinForms;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.XmlBinding.Gui;
using ICSharpCode.XmlEditor.Gui;
using System.Xml;
namespace ICSharpCode.XmlEditor
@ -132,16 +132,16 @@ namespace ICSharpCode.XmlEditor @@ -132,16 +132,16 @@ namespace ICSharpCode.XmlEditor
protected override void LoadFromPrimary()
{
var provider = this.PrimaryViewContent as ITextEditorProvider;
treeViewContainer.LoadXml(provider.TextEditor.Document.Text);
treeViewContainer.LoadXml(provider.TextEditor.Document.Text, XmlView.GetProvider(Path.GetExtension(provider.TextEditor.FileName)));
}
protected override void SaveToPrimary()
{
// Do not modify text in the primary view if the data is not well-formed XML
if (!treeViewContainer.IsErrorMessageTextBoxVisible) {
var provider = this.PrimaryViewContent as ITextEditorProvider;
var str = new StringWriter();
var writer = new XmlTextWriter(str);
ITextEditorProvider provider = this.PrimaryViewContent as ITextEditorProvider;
StringWriter str = new StringWriter();
XmlTextWriter writer = new XmlTextWriter(str);
writer.Formatting = Formatting.Indented;
treeViewContainer.Document.WriteTo(writer);
@ -149,6 +149,17 @@ namespace ICSharpCode.XmlEditor @@ -149,6 +149,17 @@ namespace ICSharpCode.XmlEditor
}
}
public string XmlContent {
get {
StringWriter str = new StringWriter();
XmlTextWriter writer = new XmlTextWriter(str);
writer.Formatting = Formatting.Indented;
treeViewContainer.Document.WriteTo(writer);
return str.ToString();
}
}
public override bool SupportsSwitchFromThisWithoutSaveLoad(OpenedFile file, IViewContent newView)
{
return false;

924
src/AddIns/BackendBindings/XmlBinding/Src/Gui/XmlTreeViewContainerControl.cs

File diff suppressed because one or more lines are too long

578
src/AddIns/BackendBindings/XmlBinding/Src/Gui/XmlTreeViewControl.cs

@ -0,0 +1,578 @@ @@ -0,0 +1,578 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision: 2741 $</version>
// </file>
using System;
using System.ComponentModel;
using System.Windows.Forms;
using System.Xml;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Gui;
namespace ICSharpCode.XmlEditor
{
/// <summary>
/// Displays a tree of XML elements. This is a separate control so it can
/// be unit tested. It has no SharpDevelop specific parts, for example,
/// the context menus are defined in the XmlTreeViewContainerControl.
/// </summary>
public class XmlTreeViewControl : ExtTreeView
{
const string ViewStatePropertyName = "XmlTreeViewControl.ViewState";
XmlDocument document;
enum InsertionMode {
Before = 0,
After = 1
}
/// <summary>
/// Raised when the delete key is pressed.
/// </summary>
public event EventHandler DeleteKeyPressed;
public XmlTreeViewControl()
{
}
/// <summary>
/// Gets or sets the xml document currently being displayed.
/// </summary>
[Browsable(false)]
public XmlDocument Document {
get {
return document;
}
set {
document = value;
// Update display.
BeginUpdate();
try {
ShowDocument();
} finally {
EndUpdate();
}
}
}
/// <summary>
/// Gets the selected element in the tree.
/// </summary>
public XmlElement SelectedElement {
get {
XmlElementTreeNode xmlElementTreeNode = SelectedElementNode;
if (xmlElementTreeNode != null) {
return xmlElementTreeNode.XmlElement;
}
return null;
}
}
/// <summary>
/// Determines whether an element is selected in the tree.
/// </summary>
public bool IsElementSelected {
get {
return SelectedElement != null;
}
}
/// <summary>
/// Gets the selected text node in the tree.
/// </summary>
public XmlText SelectedTextNode {
get {
XmlTextTreeNode xmlTextTreeNode = SelectedNode as XmlTextTreeNode;
if (xmlTextTreeNode != null) {
return xmlTextTreeNode.XmlText;
}
return null;
}
}
/// <summary>
/// Gets the selected comment node in the tree.
/// </summary>
public XmlComment SelectedComment {
get {
XmlCommentTreeNode commentTreeNode = SelectedNode as XmlCommentTreeNode;
if (commentTreeNode != null) {
return commentTreeNode.XmlComment;
}
return null;
}
}
/// <summary>
/// Determines whether a text node is selected in the tree.
/// </summary>
public bool IsTextNodeSelected {
get {
return SelectedTextNode != null;
}
}
/// <summary>
/// Saves the current state of the tree.
/// </summary>
public void SaveViewState(Properties properties)
{
properties.Set(ViewStatePropertyName, TreeViewHelper.GetViewStateString(this));
}
/// <summary>
/// Restores the node state of the tree.
/// </summary>
public void RestoreViewState(Properties properties)
{
TreeViewHelper.ApplyViewStateString(properties.Get(ViewStatePropertyName, String.Empty), this);
}
/// <summary>
/// Appends a new child element to the currently selected node.
/// </summary>
public void AppendChildElement(XmlElement element)
{
XmlElementTreeNode selectedNode = SelectedElementNode;
if (selectedNode != null) {
XmlElementTreeNode newNode = new XmlElementTreeNode(element);
newNode.AddTo(selectedNode);
selectedNode.Expand();
}
}
/// <summary>
/// Appends a new child text node to the currently selected element.
/// </summary>
public void AppendChildTextNode(XmlText textNode)
{
XmlElementTreeNode selectedNode = SelectedElementNode;
if (selectedNode != null) {
XmlTextTreeNode newNode = new XmlTextTreeNode(textNode);
newNode.AddTo(selectedNode);
selectedNode.Expand();
}
}
/// <summary>
/// Inserts a new element node before the currently selected
/// node.
/// </summary>
public void InsertElementBefore(XmlElement element)
{
InsertElement(element, InsertionMode.Before);
}
/// <summary>
/// Inserts a new element node after the currently selected
/// node.
/// </summary>
public void InsertElementAfter(XmlElement element)
{
InsertElement(element, InsertionMode.After);
}
/// <summary>
/// Removes the specified element from the tree.
/// </summary>
public void RemoveElement(XmlElement element)
{
XmlElementTreeNode node = FindElement(element);
if (node != null) {
node.Remove();
}
}
/// <summary>
/// Removes the specified text node from the tree.
/// </summary>
public void RemoveTextNode(XmlText textNode)
{
XmlTextTreeNode node = FindTextNode(textNode);
if (node != null) {
node.Remove();
}
}
/// <summary>
/// Inserts a text node before the currently selected
/// node.
/// </summary>
public void InsertTextNodeBefore(XmlText textNode)
{
InsertTextNode(textNode, InsertionMode.Before);
}
/// <summary>
/// Inserts a text node after the currently selected
/// node.
/// </summary>
public void InsertTextNodeAfter(XmlText textNode)
{
InsertTextNode(textNode, InsertionMode.After);
}
/// <summary>
/// Updates the corresponding tree node's text based on
/// the textNode's value.
/// </summary>
public void UpdateTextNode(XmlText textNode)
{
XmlTextTreeNode node = FindTextNode(textNode);
if (node != null) {
node.Update();
}
}
/// <summary>
/// Updates the corresponding tree node's text based on
/// the comment's value.
/// </summary>
public void UpdateComment(XmlComment comment)
{
XmlCommentTreeNode node = FindComment(comment);
if (node != null) {
node.Update();
}
}
/// <summary>
/// Appends a new child comment node to the currently selected element.
/// </summary>
public void AppendChildComment(XmlComment comment)
{
XmlElementTreeNode selectedNode = SelectedElementNode;
if (selectedNode != null) {
XmlCommentTreeNode newNode = new XmlCommentTreeNode(comment);
newNode.AddTo(selectedNode);
selectedNode.Expand();
}
}
/// <summary>
/// Removes the specified comment from the tree.
/// </summary>
public void RemoveComment(XmlComment comment)
{
XmlCommentTreeNode node = FindComment(comment);
if (node != null) {
node.Remove();
}
}
/// <summary>
/// Inserts a comment node before the currently selected
/// node.
/// </summary>
public void InsertCommentBefore(XmlComment comment)
{
InsertComment(comment, InsertionMode.Before);
}
/// <summary>
/// Inserts a comment node after the currently selected
/// node.
/// </summary>
public void InsertCommentAfter(XmlComment comment)
{
InsertComment(comment, InsertionMode.After);
}
/// <summary>
/// Updates the image so the corresponding tree node shows that
/// it is in the process of being cut.
/// </summary>
public void ShowCut(XmlNode node)
{
ShowCut(node, true);
}
/// <summary>
/// Updates the image so the corresponding tree node no longer
/// shows it is in the process of being cut.
/// </summary>
public void HideCut(XmlNode node)
{
ShowCut(node, false);
}
/// <summary>
/// If no node is selected after a mouse click then we make
/// sure the AfterSelect event is fired. Standard behaviour is
/// for the AfterSelect event not to be fired when the user
/// deselects all tree nodes.
/// </summary>
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
if (SelectedNode == null) {
this.OnAfterSelect(new TreeViewEventArgs(null, TreeViewAction.ByMouse));
}
}
/// <summary>
/// Raises the DeleteKeyPressed event.
/// </summary>
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Delete && DeleteKeyPressed != null) {
DeleteKeyPressed(this, new EventArgs());
}
return base.ProcessCmdKey(ref msg, keyData);
}
/// <summary>
/// Displays the document in the xml tree.
/// </summary>
void ShowDocument()
{
Nodes.Clear();
if (document != null) {
foreach (XmlNode node in document.ChildNodes) {
switch (node.NodeType) {
case XmlNodeType.Element:
XmlElementTreeNode elementNode = new XmlElementTreeNode((XmlElement)node);
elementNode.AddTo(this);
break;
case XmlNodeType.Comment:
XmlCommentTreeNode commentNode = new XmlCommentTreeNode((XmlComment)node);
commentNode.AddTo(this);
break;
}
}
}
}
/// <summary>
/// Returns the selected xml element tree node.
/// </summary>
XmlElementTreeNode SelectedElementNode {
get {
return SelectedNode as XmlElementTreeNode;
}
}
/// <summary>
/// Inserts a new element node either before or after the
/// currently selected element node.
/// </summary>
void InsertElement(XmlElement element, InsertionMode insertionMode)
{
ExtTreeNode selectedNode = (ExtTreeNode)SelectedNode;
if (selectedNode != null) {
XmlElementTreeNode parentNode = (XmlElementTreeNode)selectedNode.Parent;
XmlElementTreeNode newNode = new XmlElementTreeNode(element);
int index = parentNode.Nodes.IndexOf(selectedNode);
if (insertionMode == InsertionMode.After) {
index++;
}
newNode.Insert(index, parentNode);
}
}
/// <summary>
/// Inserts a new text node either before or after the
/// currently selected node.
/// </summary>
void InsertTextNode(XmlText textNode, InsertionMode insertionMode)
{
ExtTreeNode selectedNode = (ExtTreeNode)SelectedNode;
if (selectedNode != null) {
XmlElementTreeNode parentNode = (XmlElementTreeNode)selectedNode.Parent;
XmlTextTreeNode newNode = new XmlTextTreeNode(textNode);
int index = parentNode.Nodes.IndexOf(selectedNode);
if (insertionMode == InsertionMode.After) {
index++;
}
newNode.Insert(index, parentNode);
}
}
/// <summary>
/// Inserts a new comment node either before or after the
/// currently selected node.
/// </summary>
void InsertComment(XmlComment comment, InsertionMode insertionMode)
{
ExtTreeNode selectedNode = (ExtTreeNode)SelectedNode;
if (selectedNode != null) {
ExtTreeNode parentNode = (ExtTreeNode)selectedNode.Parent;
XmlCommentTreeNode newNode = new XmlCommentTreeNode(comment);
int index = 0;
if (parentNode != null) {
index = parentNode.Nodes.IndexOf(selectedNode);
} else {
index = Nodes.IndexOf(selectedNode);
}
if (insertionMode == InsertionMode.After) {
index++;
}
if (parentNode != null) {
newNode.Insert(index, parentNode);
} else {
newNode.Insert(index, this);
}
}
}
/// <summary>
/// Looks at all the nodes in the tree view and returns the
/// tree node that represents the specified element.
/// </summary>
XmlElementTreeNode FindElement(XmlElement element, TreeNodeCollection nodes)
{
foreach (ExtTreeNode node in nodes) {
XmlElementTreeNode elementTreeNode = node as XmlElementTreeNode;
if (elementTreeNode != null) {
if (elementTreeNode.XmlElement == element) {
return elementTreeNode;
}
// Look for a match in the element's child nodes.
XmlElementTreeNode childElementTreeNode = FindElement(element, elementTreeNode.Nodes);
if (childElementTreeNode != null) {
return childElementTreeNode;
}
}
}
return null;
}
/// <summary>
/// Finds the corresponding XmlElementTreeNode.
/// </summary>
XmlElementTreeNode FindElement(XmlElement element)
{
XmlElementTreeNode selectedElementTreeNode = SelectedNode as XmlElementTreeNode;
if (selectedElementTreeNode != null && selectedElementTreeNode.XmlElement == element) {
return selectedElementTreeNode;
} else {
return FindElement(element, Nodes);
}
}
/// <summary>
/// Looks at all the nodes in the tree view and returns the
/// tree node that represents the specified text node.
/// </summary>
XmlTextTreeNode FindTextNode(XmlText textNode, TreeNodeCollection nodes)
{
foreach (ExtTreeNode node in nodes) {
XmlTextTreeNode textTreeNode = node as XmlTextTreeNode;
if (textTreeNode != null) {
if (textTreeNode.XmlText == textNode) {
return textTreeNode;
}
} else {
// Look for a match in the node's child nodes.
XmlTextTreeNode childTextTreeNode = FindTextNode(textNode, node.Nodes);
if (childTextTreeNode != null) {
return childTextTreeNode;
}
}
}
return null;
}
/// <summary>
/// Finds the specified text node in the tree.
/// </summary>
XmlTextTreeNode FindTextNode(XmlText textNode)
{
XmlTextTreeNode selectedTextTreeNode = SelectedNode as XmlTextTreeNode;
if (selectedTextTreeNode != null && selectedTextTreeNode.XmlText == textNode) {
return selectedTextTreeNode;
} else {
return FindTextNode(textNode, Nodes);
}
}
/// <summary>
/// Looks at all the nodes in the tree view and returns the
/// tree node that represents the specified comment node.
/// </summary>
XmlCommentTreeNode FindComment(XmlComment comment, TreeNodeCollection nodes)
{
foreach (ExtTreeNode node in nodes) {
XmlCommentTreeNode commentTreeNode = node as XmlCommentTreeNode;
if (commentTreeNode != null) {
if (commentTreeNode.XmlComment == comment) {
return commentTreeNode;
}
} else {
// Look for a match in the node's child nodes.
XmlCommentTreeNode childCommentTreeNode = FindComment(comment, node.Nodes);
if (childCommentTreeNode != null) {
return childCommentTreeNode;
}
}
}
return null;
}
/// <summary>
/// Locates the specified comment in the tree.
/// </summary>
XmlCommentTreeNode FindComment(XmlComment comment)
{
XmlCommentTreeNode selectedCommentTreeNode = SelectedNode as XmlCommentTreeNode;
if (selectedCommentTreeNode != null && selectedCommentTreeNode.XmlComment == comment) {
return selectedCommentTreeNode;
} else {
return FindComment(comment, Nodes);
}
}
/// <summary>
/// Shows the corresponding tree node with the ghosted image
/// that indicates it is being cut.
/// </summary>
void ShowCutElement(XmlElement element, bool showGhostImage)
{
XmlElementTreeNode node = FindElement(element);
node.ShowGhostImage = showGhostImage;
}
/// <summary>
/// Shows the corresponding tree node with the ghosted image
/// that indicates it is being cut.
/// </summary>
void ShowCutTextNode(XmlText textNode, bool showGhostImage)
{
XmlTextTreeNode node = FindTextNode(textNode);
node.ShowGhostImage = showGhostImage;
}
/// <summary>
/// Shows the corresponding tree node with the ghosted image
/// that indicates it is being cut.
/// </summary>
void ShowCutComment(XmlComment comment, bool showGhostImage)
{
XmlCommentTreeNode node = FindComment(comment);
node.ShowGhostImage = showGhostImage;
}
/// <summary>
/// Shows the cut node with a ghost image.
/// </summary>
/// <param name="showGhostImage">True if the node should be
/// shown with the ghost image.</param>
void ShowCut(XmlNode node, bool showGhostImage)
{
if (node is XmlElement) {
ShowCutElement((XmlElement)node, showGhostImage);
} else if (node is XmlText) {
ShowCutTextNode((XmlText)node, showGhostImage);
} else if (node is XmlComment) {
ShowCutComment((XmlComment)node, showGhostImage);
}
}
}
}

807
src/AddIns/BackendBindings/XmlBinding/Src/Gui/XmlView.cs

@ -0,0 +1,807 @@ @@ -0,0 +1,807 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Siegfried Pammer" email="sie_pam@gmx.at"/>
// <version>$Revision$</version>
// </file>
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Net;
using System.Text;
using System.Xml;
using System.Xml.Schema;
using System.Xml.XPath;
using System.Xml.Xsl;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.XmlEditor.Gui;
using ICSharpCode.XmlEditor.Parser;
namespace ICSharpCode.XmlEditor.Gui
{
public class XmlView
{
static readonly Dictionary<OpenedFile, XmlView> mapping = new Dictionary<OpenedFile, XmlView>();
/// <summary>
/// Retrieves additional data for a XML file.
/// </summary>
/// <param name="file">The file to retrieve the data for.</param>
/// <returns>null if the file is not a valid XML file, otherwise a XmlView instance with additional data used by the XML editor.</returns>
public static XmlView ForFile(OpenedFile file)
{
if (!XmlDisplayBinding.IsFileNameHandled(file.FileName))
return null;
XmlView instance;
if (!mapping.TryGetValue(file, out instance)) {
file.FileClosed += new EventHandler(FileClosedHandler);
instance = new XmlView() { File = file };
mapping.Add(file, instance);
}
return instance;
}
public OpenedFile File { get; set; }
public static XmlView ForView(IViewContent view)
{
if (view == null)
return null;
if (view.PrimaryFile == null)
return null;
return ForFile(view.PrimaryFile);
}
static void FileClosedHandler(object sender, EventArgs e)
{
if (sender is OpenedFile)
mapping.Remove(sender as OpenedFile);
}
public string StylesheetFileName { get; set; }
public XmlCompletionDataProvider GetProvider()
{
return GetProvider(Path.GetExtension(File.FileName));
}
public static XmlCompletionDataProvider GetProvider(string extension)
{
string defaultNamespacePrefix = XmlSchemaManager.GetNamespacePrefix(extension);
XmlSchemaCompletionData defaultSchemaCompletionData = XmlSchemaManager.GetSchemaCompletionData(extension);
return new XmlCompletionDataProvider(XmlSchemaManager.SchemaCompletionDataItems,
defaultSchemaCompletionData,
defaultNamespacePrefix);
}
public ITextEditor GetTextEditor()
{
foreach (IViewContent view in File.RegisteredViewContents) {
ITextEditorProvider provider = view as ITextEditorProvider;
if (provider != null) {
IDocument document = provider.GetDocumentForFile(File);
if (document != null)
return provider.TextEditor;
}
}
return null;
}
public XmlTreeView GetXmlView()
{
foreach (IViewContent view in File.RegisteredViewContents) {
if (view is XmlTreeView)
return view as XmlTreeView;
}
return null;
}
/// <summary>
/// Finds the xml nodes that match the specified xpath.
/// </summary>
/// <returns>An array of XPathNodeMatch items. These include line number
/// and line position information aswell as the node found.</returns>
public static XPathNodeMatch[] SelectNodes(string xml, string xpath, ReadOnlyCollection<XmlNamespace> namespaces)
{
XmlTextReader xmlReader = new XmlTextReader(new StringReader(xml));
xmlReader.XmlResolver = null;
XPathDocument doc = new XPathDocument(xmlReader);
XPathNavigator navigator = doc.CreateNavigator();
// Add namespaces.
XmlNamespaceManager namespaceManager = new XmlNamespaceManager(navigator.NameTable);
foreach (XmlNamespace xmlNamespace in namespaces) {
namespaceManager.AddNamespace(xmlNamespace.Prefix, xmlNamespace.Uri);
}
// Run the xpath query.
XPathNodeIterator iterator = navigator.Select(xpath, namespaceManager);
List<XPathNodeMatch> nodes = new List<XPathNodeMatch>();
while (iterator.MoveNext()) {
nodes.Add(new XPathNodeMatch(iterator.Current));
}
return nodes.ToArray();
}
/// <summary>
/// Finds the xml nodes that match the specified xpath.
/// </summary>
/// <returns>An array of XPathNodeMatch items. These include line number
/// and line position information aswell as the node found.</returns>
public static XPathNodeMatch[] SelectNodes(string xml, string xpath)
{
List<XmlNamespace> list = new List<XmlNamespace>();
return SelectNodes(xml, xpath, new ReadOnlyCollection<XmlNamespace>(list));
}
/// <summary>
/// Finds the xml nodes in the current document that match the specified xpath.
/// </summary>
/// <returns>An array of XPathNodeMatch items. These include line number
/// and line position information aswell as the node found.</returns>
public XPathNodeMatch[] SelectNodes(string xpath, ReadOnlyCollection<XmlNamespace> namespaces)
{
return SelectNodes(GetXmlView().XmlContent, xpath, namespaces);
}
public void GoToSchemaDefinition()
{
// Find schema object for selected xml element or attribute.
XmlCompletionDataProvider provider = GetProvider();
XmlSchemaCompletionData currentSchemaCompletionData = provider.FindSchemaFromFileName(File.FileName);
ITextEditor editor = GetTextEditor();
if (editor == null)
return;
XmlSchemaObject schemaObject = GetSchemaObjectSelected(editor.Document.Text, editor.Caret.Offset, provider, currentSchemaCompletionData);
// Open schema.
if (schemaObject != null && schemaObject.SourceUri != null && schemaObject.SourceUri.Length > 0) {
string fileName = schemaObject.SourceUri.Replace("file:///", String.Empty);
FileService.JumpToFilePosition(fileName, schemaObject.LineNumber, schemaObject.LinePosition);
}
}
/// <summary>
/// Checks that the xml in this view is well-formed.
/// </summary>
public bool IsWellFormed {
get {
ITextEditor editor = GetTextEditor();
if (editor == null)
return false;
try {
XmlDocument Document = new XmlDocument();
Document.LoadXml(editor.Document.Text);
return true;
} catch(XmlException ex) {
AddTask(editor.FileName, ex.Message, ex.LinePosition - 1, ex.LineNumber - 1, TaskType.Error);
} catch (WebException ex) {
AddTask(editor.FileName, ex.Message, 0, 0, TaskType.Error);
}
return false;
}
}
static void AddTask(string fileName, string message, int column, int line, TaskType taskType)
{
TaskService.Add(new Task(fileName, message, column, line, taskType));
}
#region XmlView methods
/// <summary>
/// If the attribute value found references another item in the schema
/// return this instead of the attribute schema object. For example, if the
/// user can select the attribute value and the code will work out the schema object pointed to by the ref
/// or type attribute:
///
/// xs:element ref="ref-name"
/// xs:attribute type="type-name"
/// </summary>
/// <returns>
/// The <paramref name="attribute"/> if no schema object was referenced.
/// </returns>
static XmlSchemaObject GetSchemaObjectReferenced(string xml, int index, XmlCompletionDataProvider provider, XmlSchemaCompletionData currentSchemaCompletionData, XmlSchemaElement element, XmlSchemaAttribute attribute)
{
XmlSchemaObject schemaObject = null;
if (IsXmlSchemaNamespace(element)) {
// Find attribute value.
string attributeValue = XmlParser.GetAttributeValueAtIndex(xml, index);
if (attributeValue.Length == 0) {
return attribute;
}
if (attribute.Name == "ref") {
schemaObject = FindSchemaObjectReference(attributeValue, provider, currentSchemaCompletionData, element.Name);
} else if (attribute.Name == "type") {
schemaObject = FindSchemaObjectType(attributeValue, provider, currentSchemaCompletionData, element.Name);
}
}
if (schemaObject != null) {
return schemaObject;
}
return attribute;
}
/// <summary>
/// Attempts to locate the reference name in the specified schema.
/// </summary>
/// <param name="name">The reference to look up.</param>
/// <param name="schemaCompletionData">The schema completion data to use to
/// find the reference.</param>
/// <param name="elementName">The element to determine what sort of reference it is
/// (e.g. group, attribute, element).</param>
/// <returns><see langword="null"/> if no match can be found.</returns>
static XmlSchemaObject FindSchemaObjectReference(string name, XmlCompletionDataProvider provider, XmlSchemaCompletionData schemaCompletionData, string elementName)
{
QualifiedName qualifiedName = schemaCompletionData.CreateQualifiedName(name);
XmlSchemaCompletionData qualifiedNameSchema = provider.FindSchema(qualifiedName.Namespace);
if (qualifiedNameSchema != null) {
schemaCompletionData = qualifiedNameSchema;
}
switch (elementName) {
case "element":
return schemaCompletionData.FindElement(qualifiedName);
case "attribute":
return schemaCompletionData.FindAttribute(qualifiedName.Name);
case "group":
return schemaCompletionData.FindGroup(qualifiedName.Name);
case "attributeGroup":
return schemaCompletionData.FindAttributeGroup(qualifiedName.Name);
}
return null;
}
/// <summary>
/// Attempts to locate the type name in the specified schema.
/// </summary>
/// <param name="name">The type to look up.</param>
/// <param name="schemaCompletionData">The schema completion data to use to
/// find the type.</param>
/// <param name="elementName">The element to determine what sort of type it is
/// (e.g. group, attribute, element).</param>
/// <returns><see langword="null"/> if no match can be found.</returns>
static XmlSchemaObject FindSchemaObjectType(string name, XmlCompletionDataProvider provider, XmlSchemaCompletionData schemaCompletionData, string elementName)
{
QualifiedName qualifiedName = schemaCompletionData.CreateQualifiedName(name);
XmlSchemaCompletionData qualifiedNameSchema = provider.FindSchema(qualifiedName.Namespace);
if (qualifiedNameSchema != null) {
schemaCompletionData = qualifiedNameSchema;
}
switch (elementName) {
case "element":
return schemaCompletionData.FindComplexType(qualifiedName);
case "attribute":
return schemaCompletionData.FindSimpleType(qualifiedName.Name);
}
return null;
}
/// <summary>
/// Checks whether the element belongs to the XSD namespace.
/// </summary>
static bool IsXmlSchemaNamespace(XmlSchemaElement element)
{
XmlQualifiedName qualifiedName = element.QualifiedName;
if (qualifiedName != null) {
return XmlSchemaManager.IsXmlSchemaNamespace(qualifiedName.Namespace);
}
return false;
}
/// <summary>
/// Gets the XmlSchemaObject that defines the currently selected xml element or
/// attribute.
/// </summary>
/// <param name="text">The complete xml text.</param>
/// <param name="index">The current cursor index.</param>
/// <param name="provider">The completion data provider</param>
public static XmlSchemaObject GetSchemaObjectSelected(string xml, int index, XmlCompletionDataProvider provider)
{
return GetSchemaObjectSelected(xml, index, provider, null);
}
/// <summary>
/// Gets the XmlSchemaObject that defines the currently selected xml element or
/// attribute.
/// </summary>
/// <param name="text">The complete xml text.</param>
/// <param name="index">The current cursor index.</param>
/// <param name="provider">The completion data provider</param>
/// <param name="currentSchemaCompletionData">This is the schema completion data for the
/// schema currently being displayed. This can be null if the document is
/// not a schema.</param>
public static XmlSchemaObject GetSchemaObjectSelected(string xml, int index, XmlCompletionDataProvider provider, XmlSchemaCompletionData currentSchemaCompletionData)
{
// Find element under cursor.
XmlElementPath path = XmlParser.GetActiveElementStartPathAtIndex(xml, index);
string attributeName = XmlParser.GetAttributeNameAtIndex(xml, index);
// Find schema definition object.
XmlSchemaCompletionData schemaCompletionData = provider.FindSchema(path);
XmlSchemaObject schemaObject = null;
if (schemaCompletionData != null) {
XmlSchemaElement element = schemaCompletionData.FindElement(path);
schemaObject = element;
if (element != null) {
if (attributeName.Length > 0) {
XmlSchemaAttribute attribute = schemaCompletionData.FindAttribute(element, attributeName);
if (attribute != null) {
if (currentSchemaCompletionData != null) {
schemaObject = GetSchemaObjectReferenced(xml, index, provider, currentSchemaCompletionData, element, attribute);
} else {
schemaObject = attribute;
}
}
}
return schemaObject;
}
}
return null;
}
void ShowErrorList()
{
if (ErrorListPad.ShowAfterBuild && TaskService.SomethingWentWrong) {
WorkbenchSingleton.Workbench.GetPad(typeof(ErrorListPad)).BringPadToFront();
}
}
/// <summary>
/// Converts a set of schemas to a string array, each array item
/// contains the schema converted to a string.
/// </summary>
static string[] GetSchemas(XmlSchemaSet schemaSet, ITextEditor editor)
{
List<string> schemas = new List<string>();
foreach (XmlSchema schema in schemaSet.Schemas()) {
using (EncodedStringWriter writer = new EncodedStringWriter(Encoding.Default)) { // TODO : use encoding used in ITextEditor (property missing?)
using (XmlTextWriter xmlWriter = CreateXmlTextWriter(writer, editor)) {
schema.Write(xmlWriter);
schemas.Add(writer.ToString());
}
}
}
return schemas.ToArray();
}
static XmlTextWriter CreateXmlTextWriter(TextWriter textWriter, ITextEditor editor)
{
XmlTextWriter writer = new XmlTextWriter(textWriter);
writer.Indentation = editor.Options.IndentationString.Length;
writer.IndentChar = (editor.Options.IndentationString.Length > 0) ? editor.Options.IndentationString[0] : ' ';
writer.Formatting = Formatting.Indented;
return writer;
}
/// <summary>
/// Creates a schema based on the xml content.
/// </summary>
/// <returns>A set of generated schemas or null if the xml content is not
/// well formed.</returns>
public string[] InferSchema()
{
ITextEditor editor = GetTextEditor();
if (editor == null)
return null;
TaskService.ClearExceptCommentTasks();
if (IsWellFormed) {
try {
using (XmlTextReader reader = new XmlTextReader(new StringReader(editor.Document.Text))) {
XmlSchemaInference schemaInference = new XmlSchemaInference();
XmlSchemaSet schemaSet = schemaInference.InferSchema(reader);
return GetSchemas(schemaSet, editor);
}
} catch (XmlSchemaInferenceException ex) {
AddTask(editor.FileName, ex.Message, ex.LinePosition, ex.LineNumber, TaskType.Error);
}
}
ShowErrorList();
return null;
}
/// <summary>
/// Pretty prints the xml.
/// </summary>
public void FormatXml()
{
ITextEditor editor = GetTextEditor();
if (editor == null)
return;
TaskService.ClearExceptCommentTasks();
if (IsWellFormed) {
ReplaceAll(editor.Document.Text);
} else {
ShowErrorList();
}
}
/// <summary>
/// Replaces the entire text of the xml view with the xml in the
/// specified. The xml will be formatted.
/// </summary>
public void ReplaceAll(string xml)
{
ITextEditor editor = GetTextEditor();
if (editor == null)
return;
string formattedXml = SimpleFormat(IndentedFormat(xml));
editor.Document.Text = formattedXml;
//UpdateFolding(); // TODO : add again when folding is implemented in AvalonEdit
}
/// <summary>
/// Returns a formatted xml string using a simple formatting algorithm.
/// </summary>
static string SimpleFormat(string xml)
{
return xml.Replace("><", ">\r\n<");
}
/// <summary>
/// Returns a pretty print version of the given xml.
/// </summary>
/// <param name="xml">Xml string to pretty print.</param>
/// <returns>A pretty print version of the specified xml. If the
/// string is not well formed xml the original string is returned.
/// </returns>
string IndentedFormat(string xml)
{
string indentedText = string.Empty;
ITextEditor editor = GetTextEditor();
if (editor == null)
return indentedText;
try {
XmlTextReader reader = new XmlTextReader(new StringReader(xml));
reader.WhitespaceHandling = WhitespaceHandling.None;
StringWriter indentedXmlWriter = new StringWriter();
XmlTextWriter writer = CreateXmlTextWriter(indentedXmlWriter, editor);
writer.WriteNode(reader, false);
writer.Flush();
indentedText = indentedXmlWriter.ToString();
} catch(Exception) {
indentedText = xml;
}
return indentedText;
}
/// <summary>
/// Validates the xml against known schemas.
/// </summary>
public void ValidateXml()
{
TaskService.ClearExceptCommentTasks();
Category.ClearText();
ShowOutputWindow();
OutputWindowWriteLine(StringParser.Parse("${res:MainWindow.XmlValidationMessages.ValidationStarted}"));
if (IsSchema) {
if (!ValidateSchema()) {
return;
}
} else {
if (!ValidateAgainstSchema()) {
return;
}
}
OutputWindowWriteLine(String.Empty);
OutputWindowWriteLine(StringParser.Parse("${res:MainWindow.XmlValidationMessages.ValidationSuccess}"));
}
bool IsSchema {
get {
string extension = Path.GetExtension(File.FileName);
if (extension != null) {
return String.Compare(".xsd", extension, true) == 0;
}
return false;
}
}
/// <summary>
/// Validates the XML in the editor against all the schemas in the
/// schema manager.
/// </summary>
bool ValidateAgainstSchema()
{
ITextEditor editor = GetTextEditor();
if (editor == null)
return false;
try {
StringReader stringReader = new StringReader(editor.Document.Text);
XmlTextReader xmlReader = new XmlTextReader(stringReader);
xmlReader.XmlResolver = null;
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.ValidationFlags = XmlSchemaValidationFlags.None;
settings.XmlResolver = null;
XmlSchemaCompletionData schemaData = null;
try {
for (int i = 0; i < XmlSchemaManager.SchemaCompletionDataItems.Count; ++i) {
schemaData = XmlSchemaManager.SchemaCompletionDataItems[i];
settings.Schemas.Add(schemaData.Schema);
}
} catch (XmlSchemaException ex) {
DisplayValidationError(schemaData.FileName, ex.Message, ex.LinePosition - 1, ex.LineNumber - 1);
ShowValidationFailedMessage();
ShowErrorList();
return false;
}
XmlReader reader = XmlReader.Create(xmlReader, settings);
XmlDocument doc = new XmlDocument();
doc.Load(reader);
return true;
} catch (XmlSchemaException ex) {
DisplayValidationError(File.FileName, ex.Message, ex.LinePosition - 1, ex.LineNumber - 1);
} catch (XmlException ex) {
DisplayValidationError(File.FileName, ex.Message, ex.LinePosition - 1, ex.LineNumber - 1);
}
ShowValidationFailedMessage();
ShowErrorList();
return false;
}
/// <summary>
/// Assumes the content in the editor is a schema and validates it using
/// the XmlSchema class. This is used instead of validating against the
/// XMLSchema.xsd file since it gives us better error information.
/// </summary>
bool ValidateSchema()
{
ITextEditor editor = GetTextEditor();
if (editor == null)
return false;
StringReader stringReader = new StringReader(editor.Document.Text);
XmlTextReader xmlReader = new XmlTextReader(stringReader);
xmlReader.XmlResolver = null;
try {
XmlSchema schema = XmlSchema.Read(xmlReader, new ValidationEventHandler(SchemaValidation));
schema.Compile(new ValidationEventHandler(SchemaValidation));
} catch (XmlSchemaException ex) {
DisplayValidationError(File.FileName, ex.Message, ex.LinePosition - 1, ex.LineNumber - 1);
} catch (XmlException ex) {
DisplayValidationError(File.FileName, ex.Message, ex.LinePosition - 1, ex.LineNumber - 1);
} finally {
xmlReader.Close();
}
if (TaskService.SomethingWentWrong) {
ShowValidationFailedMessage();
ShowErrorList();
return false;
}
return true;
}
/// <summary>
/// Displays the validation error.
/// </summary>
static void DisplayValidationError(string fileName, string message, int column, int line)
{
OutputWindowWriteLine(message);
AddTask(fileName, message, column, line, TaskType.Error);
}
static void ShowValidationFailedMessage()
{
OutputWindowWriteLine(string.Empty);
OutputWindowWriteLine(StringParser.Parse("${res:MainWindow.XmlValidationMessages.ValidationFailed}"));
}
void SchemaValidation(object source, ValidationEventArgs e)
{
if (e.Severity == XmlSeverityType.Error) {
DisplayValidationError(File.FileName, e.Message, e.Exception.LinePosition - 1, e.Exception.LineNumber - 1);
} else {
DisplayValidationWarning(File.FileName, e.Message, e.Exception.LinePosition - 1, e.Exception.LineNumber - 1);
}
}
/// <summary>
/// Displays the validation warning.
/// </summary>
void DisplayValidationWarning(string fileName, string message, int column, int line)
{
OutputWindowWriteLine(message);
AddTask(fileName, message, column, line, TaskType.Warning);
}
/// <summary>
/// Applys the stylesheet to the xml and displays the resulting output.
/// </summary>
public void RunXslTransform(string xsl)
{
try {
WorkbenchSingleton.Workbench.GetPad(typeof(CompilerMessageView)).BringPadToFront();
TaskService.ClearExceptCommentTasks();
ITextEditor editor = GetTextEditor();
if (editor == null)
return;
if (IsWellFormed) {
if (IsValidXsl(xsl)) {
try {
string transformedXml = Transform(editor.Document.Text, xsl);
ShowTransformOutput(transformedXml);
} catch (XsltException ex) {
AddTask(GetFileNameFromInnerException(ex, StylesheetFileName), GetInnerExceptionErrorMessage(ex), ex.LineNumber - 1, ex.LinePosition - 1, TaskType.Error);
}
}
}
ShowErrorList();
} catch (Exception ex) {
MessageService.ShowError(ex);
}
}
/// <summary>
/// Displays the transformed output.
/// </summary>
void ShowTransformOutput(string xml)
{
// Pretty print the xml.
xml = SimpleFormat(IndentedFormat(xml));
// Display the output xml.
XslOutputView.EditorInstance.Document.Text = xml;
XslOutputView.Instance.WorkbenchWindow.SelectWindow();
}
/// <summary>
/// Runs an XSL transform on the input xml.
/// </summary>
/// <param name="input">The input xml to transform.</param>
/// <param name="transform">The transform xml.</param>
/// <returns>The output of the transform.</returns>
static string Transform(string input, string transform)
{
StringReader inputString = new StringReader(input);
XmlTextReader sourceDocument = new XmlTextReader(inputString);
StringReader transformString = new StringReader(transform);
XPathDocument transformDocument = new XPathDocument(transformString);
XslCompiledTransform xslTransform = new XslCompiledTransform();
xslTransform.Load(transformDocument, XsltSettings.TrustedXslt, new XmlUrlResolver());
MemoryStream outputStream = new MemoryStream();
XmlTextWriter writer = new XmlTextWriter(outputStream, Encoding.UTF8);
xslTransform.Transform(sourceDocument, null, writer);
int preambleLength = Encoding.UTF8.GetPreamble().Length;
byte[] outputBytes = outputStream.ToArray();
return UTF8Encoding.UTF8.GetString(outputBytes, preambleLength, outputBytes.Length - preambleLength);
}
/// <summary>
/// Validates the given xsl string,.
/// </summary>
bool IsValidXsl(string xml)
{
try {
WorkbenchSingleton.Workbench.GetPad(typeof(CompilerMessageView)).BringPadToFront();
StringReader reader = new StringReader(xml);
XPathDocument doc = new XPathDocument(reader);
XslCompiledTransform xslTransform = new XslCompiledTransform();
xslTransform.Load(doc, XsltSettings.Default, new XmlUrlResolver());
return true;
} catch(XsltCompileException ex) {
AddTask(StylesheetFileName, GetInnerExceptionErrorMessage(ex), ex.LineNumber - 1, ex.LinePosition - 1, TaskType.Error);
} catch(XsltException ex) {
AddTask(StylesheetFileName, ex.Message, ex.LinePosition - 1, ex.LineNumber - 1, TaskType.Error);
} catch(XmlException ex) {
AddTask(StylesheetFileName, ex.Message, ex.LinePosition - 1, ex.LineNumber - 1, TaskType.Error);
}
return false;
}
/// <summary>
/// Brings output window pad to the front.
/// </summary>
static void ShowOutputWindow()
{
WorkbenchSingleton.Workbench.GetPad(typeof(CompilerMessageView)).BringPadToFront();
}
/// <summary>
/// Writes a line of text to the output window.
/// </summary>
/// <param name="message">The message to send to the output
/// window.</param>
static void OutputWindowWriteLine(string message)
{
Category.AppendText(String.Concat(message, Environment.NewLine));
}
static MessageViewCategory category;
/// <summary>
/// Gets the xml validation output window.
/// </summary>
static MessageViewCategory Category {
get {
if (category == null) {
MessageViewCategory.Create(ref category, CategoryName);
}
return category;
}
}
/// <summary>
/// Returns the inner exception message if there is one otherwise returns the exception's error message.
/// </summary>
static string GetInnerExceptionErrorMessage(Exception ex)
{
if(ex.InnerException != null) {
return ex.InnerException.Message;
}
return ex.Message;
}
/// <summary>
/// Tries to get the filename from the inner exception otherwise returns the default filename.
/// </summary>
/// <param name="ex"></param>
/// <param name="defaultFileName"></param>
/// <returns></returns>
static string GetFileNameFromInnerException(Exception ex, string defaultFileName)
{
XmlException innerException = ex.InnerException as XmlException;
if (innerException != null) {
string fileName = innerException.SourceUri.Replace("file:///", String.Empty);
if (!String.IsNullOrEmpty(fileName)) {
return fileName;
}
}
return defaultFileName;
}
/// <summary>
/// Output window category name.
/// </summary>
public static readonly string CategoryName = "XML";
#endregion
}
}

66
src/AddIns/BackendBindings/XmlBinding/Src/Gui/XslOutputView.cs

@ -5,34 +5,52 @@ @@ -5,34 +5,52 @@
// <version>$Revision: -1 $</version>
// </file>
using ICSharpCode.SharpDevelop.Editor;
using System;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Gui;
namespace ICSharpCode.XmlEditor
{
// TODO : reimplement this
// /// <summary>
// /// Displays the resulting output from an XSL transform.
// /// </summary>
// public class XslOutputView : XmlView
// {
// public XslOutputView()
// {
// TitleName = StringParser.Parse("${res:ICSharpCode.XmlEditor.XslOutputView.Title}");
// TextEditorControl.FileName = String.Empty;
// }
//
// public static XslOutputView Instance {
// get {
// foreach (IViewContent content in WorkbenchSingleton.Workbench.ViewContentCollection) {
// if (content is XslOutputView) {
// LoggingService.Debug("XslOutputView instance exists.");
// return (XslOutputView)content;
// }
// }
// return null;
// }
// }
// }
/// <summary>
/// Displays the resulting output from an XSL transform.
/// </summary>
public static class XslOutputView
{
static IViewContent instance;
static ITextEditor editor;
public static ITextEditor EditorInstance {
get {
if (editor == null) {
instance = FileService.NewFile("xslOutput.xml", "");
editor = (instance as ITextEditorProvider).TextEditor;
instance.Disposed += new EventHandler(InstanceDisposed);
}
return editor;
}
}
public static IViewContent Instance {
get {
if (instance == null) {
instance = FileService.NewFile("xslOutput.xml", "");
editor = (instance as ITextEditorProvider).TextEditor;
instance.Disposed += new EventHandler(InstanceDisposed);
} else {
instance.WorkbenchWindow.SelectWindow();
}
return instance;
}
}
static void InstanceDisposed(object sender, EventArgs e)
{
instance = null;
editor = null;
}
}
}

4
src/AddIns/BackendBindings/XmlBinding/Src/Parser/Parser.cs

@ -5,13 +5,13 @@ @@ -5,13 +5,13 @@
// <version>$Revision: -1 $</version>
// </file>
using ICSharpCode.XmlBinding.Gui;
using ICSharpCode.XmlEditor.Gui;
using System;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.XmlEditor;
namespace ICSharpCode.XmlBinding.Parser
namespace ICSharpCode.XmlEditor.Parser
{
/// <summary>
/// Parser that does nothing except return empty compilation unit

2
src/AddIns/BackendBindings/XmlBinding/Src/Parser/QualifiedName.cs

@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
using System;
using System.Xml;
namespace ICSharpCode.XmlBinding.Parser
namespace ICSharpCode.XmlEditor.Parser
{
/// <summary>
/// An <see cref="XmlQualifiedName"/> with the namespace prefix.

2
src/AddIns/BackendBindings/XmlBinding/Src/Parser/QualifiedNameCollection.cs

@ -11,7 +11,7 @@ using System.Collections.Generic; @@ -11,7 +11,7 @@ using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
namespace ICSharpCode.XmlBinding.Parser
namespace ICSharpCode.XmlEditor.Parser
{
/// <summary>
/// A collection that stores <see cref='QualifiedName'/> objects.

2
src/AddIns/BackendBindings/XmlBinding/Src/Parser/XmlElementPath.cs

@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
using System;
using System.Text;
namespace ICSharpCode.XmlBinding.Parser
namespace ICSharpCode.XmlEditor.Parser
{
/// <summary>
/// Represents the path to an xml element starting from the root of the

2
src/AddIns/BackendBindings/XmlBinding/Src/Parser/XmlParser.cs

@ -13,7 +13,7 @@ using System.Text; @@ -13,7 +13,7 @@ using System.Text;
using System.Text.RegularExpressions;
using System.Xml;
namespace ICSharpCode.XmlBinding.Parser
namespace ICSharpCode.XmlEditor.Parser
{
/// <summary>
/// Utility class that contains xml parsing routines used to determine

12
src/AddIns/BackendBindings/XmlBinding/Src/StylesheetAssignedCondition.cs

@ -5,6 +5,7 @@ @@ -5,6 +5,7 @@
// <version>$Revision: -1 $</version>
// </file>
using ICSharpCode.XmlEditor.Gui;
using System;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Gui;
@ -19,14 +20,9 @@ namespace ICSharpCode.XmlEditor @@ -19,14 +20,9 @@ namespace ICSharpCode.XmlEditor
{
public bool IsValid(object caller, Condition condition)
{
throw new NotImplementedException();
// IWorkbenchWindow window = WorkbenchSingleton.Workbench.ActiveWorkbenchWindow;
// if (window != null) {
// XmlView view = window.ActiveViewContent as XmlView;
// if (view != null) {
// return view.StylesheetFileName != null;
// }
// }
XmlView properties = XmlView.ForView(WorkbenchSingleton.Workbench.ActiveViewContent);
if (properties != null)
return properties.StylesheetFileName != null;
return false;
}
}

2
src/AddIns/BackendBindings/XmlBinding/Src/XmlFormattingStrategy.cs

@ -14,7 +14,7 @@ using System.Text; @@ -14,7 +14,7 @@ using System.Text;
using System.Xml;
using ICSharpCode.Core;
namespace ICSharpCode.XmlBinding
namespace ICSharpCode.XmlEditor
{
/// <summary>
/// This class currently inserts the closing tags to typed openening tags

218
src/AddIns/BackendBindings/XmlBinding/Src/XmlSchemaManager.cs

@ -0,0 +1,218 @@ @@ -0,0 +1,218 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision: 1965 $</version>
// </file>
using System;
using System.IO;
using System.Runtime.InteropServices;
using ICSharpCode.Core;
namespace ICSharpCode.XmlEditor
{
/// <summary>
/// Keeps track of all the schemas that the Xml Editor is aware
/// of.
/// </summary>
public class XmlSchemaManager
{
public const string XmlSchemaNamespace = "http://www.w3.org/2001/XMLSchema";
static XmlSchemaCompletionDataCollection schemas = null;
static XmlSchemaManager manager = null;
public static event EventHandler UserSchemaAdded;
public static event EventHandler UserSchemaRemoved;
/// <summary>
/// Determines whether the specified namespace is actually the W3C namespace for
/// XSD files.
/// </summary>
public static bool IsXmlSchemaNamespace(string schemaNamespace)
{
return schemaNamespace == XmlSchemaNamespace;
}
/// <summary>
/// Gets the schemas that SharpDevelop knows about.
/// </summary>
public static XmlSchemaCompletionDataCollection SchemaCompletionDataItems {
get {
if (schemas == null) {
schemas = new XmlSchemaCompletionDataCollection();
manager = new XmlSchemaManager();
ReadSchemas();
}
return schemas;
}
}
/// <summary>
/// Gets the schema completion data that is associated with the
/// specified file extension.
/// </summary>
public static XmlSchemaCompletionData GetSchemaCompletionData(string extension)
{
XmlSchemaCompletionData data = null;
XmlSchemaAssociation association = XmlEditorAddInOptions.GetSchemaAssociation(extension);
if (association != null) {
if (association.NamespaceUri.Length > 0) {
data = SchemaCompletionDataItems[association.NamespaceUri];
}
}
return data;
}
/// <summary>
/// Gets the namespace prefix that is associated with the
/// specified file extension.
/// </summary>
public static string GetNamespacePrefix(string extension)
{
string prefix = String.Empty;
XmlSchemaAssociation association = XmlEditorAddInOptions.GetSchemaAssociation(extension);
if (association != null) {
prefix = association.NamespacePrefix;
}
return prefix;
}
/// <summary>
/// Removes the schema with the specified namespace from the
/// user schemas folder and removes the completion data.
/// </summary>
public static void RemoveUserSchema(string namespaceUri)
{
XmlSchemaCompletionData schemaData = SchemaCompletionDataItems[namespaceUri];
if (schemaData != null) {
if (File.Exists(schemaData.FileName)) {
File.Delete(schemaData.FileName);
}
SchemaCompletionDataItems.Remove(schemaData);
OnUserSchemaRemoved();
}
}
/// <summary>
/// Adds the schema to the user schemas folder and makes the
/// schema available to the xml editor.
/// </summary>
public static void AddUserSchema(XmlSchemaCompletionData schemaData)
{
if (SchemaCompletionDataItems[schemaData.NamespaceUri] == null) {
if (!Directory.Exists(UserSchemaFolder)) {
Directory.CreateDirectory(UserSchemaFolder);
}
string fileName = Path.GetFileName(schemaData.FileName);
string destinationFileName = Path.Combine(UserSchemaFolder, fileName);
File.Copy(schemaData.FileName, destinationFileName);
schemaData.FileName = destinationFileName;
SchemaCompletionDataItems.Add(schemaData);
OnUserSchemaAdded();
} else {
LoggingService.Warn("Trying to add a schema that already exists. Namespace=" + schemaData.NamespaceUri);
}
}
/// <summary>
/// Reads the system and user added schemas.
/// </summary>
static void ReadSchemas()
{
// MSBuild schemas are in framework directory:
ReadSchemas(RuntimeEnvironment.GetRuntimeDirectory(), true);
ReadSchemas(SchemaFolder, true);
ReadSchemas(UserSchemaFolder, false);
}
/// <summary>
/// Reads all .xsd files in the specified folder.
/// </summary>
static void ReadSchemas(string folder, bool readOnly)
{
if (Directory.Exists(folder)) {
foreach (string fileName in Directory.GetFiles(folder, "*.xsd")) {
ReadSchema(fileName, readOnly);
}
}
}
/// <summary>
/// Reads an individual schema and adds it to the collection.
/// </summary>
/// <remarks>
/// If the schema namespace exists in the collection it is not added.
/// </remarks>
static void ReadSchema(string fileName, bool readOnly)
{
try {
string baseUri = XmlSchemaCompletionData.GetUri(fileName);
XmlSchemaCompletionData data = new XmlSchemaCompletionData(baseUri, fileName);
if (data.NamespaceUri != null) {
if (schemas[data.NamespaceUri] == null) {
data.ReadOnly = readOnly;
schemas.Add(data);
} else {
// Namespace already exists.
LoggingService.Warn("Ignoring duplicate schema namespace " + data.NamespaceUri);
}
} else {
// Namespace is null.
LoggingService.Warn("Ignoring schema with no namespace " + data.FileName);
}
} catch (Exception ex) {
LoggingService.Warn("Unable to read schema '" + fileName + "'. ", ex);
}
}
/// <summary>
/// Gets the folder where the schemas for all users on the
/// local machine are stored.
/// </summary>
static string SchemaFolder {
get {
return Path.Combine(PropertyService.DataDirectory, "schemas");
}
}
/// <summary>
/// Gets the folder where schemas are stored for an individual user.
/// </summary>
static string UserSchemaFolder {
get {
return Path.Combine(PropertyService.ConfigDirectory, "schemas");
}
}
/// <summary>
/// Should really pass schema info with the event.
/// </summary>
static void OnUserSchemaAdded()
{
if (UserSchemaAdded != null) {
UserSchemaAdded(manager, new EventArgs());
}
}
/// <summary>
/// Should really pass schema info with the event.
/// </summary>
static void OnUserSchemaRemoved()
{
if (UserSchemaRemoved != null) {
UserSchemaRemoved(manager, new EventArgs());
}
}
}
}

26
src/AddIns/BackendBindings/XmlBinding/XmlBinding.addin

@ -5,21 +5,21 @@ @@ -5,21 +5,21 @@
addInManagerHidden = "preinstalled">
<Runtime>
<Import assembly = "XmlBinding.dll">
<Import assembly = "XmlEditor.dll">
<ConditionEvaluator name = "StylesheetAssigned" class = "ICSharpCode.XmlEditor.StylesheetAssignedCondition"/>
</Import>
<Import assembly = ":ICSharpCode.SharpDevelop"/>
</Runtime>
<Path name = "/AddIns/DefaultTextEditor/Formatter/XML">
<Class id ="XmlFormatter" class = "ICSharpCode.XmlBinding.XmlFormattingStrategy"/>
<Class id ="XmlFormatter" class = "ICSharpCode.XmlEditor.XmlFormattingStrategy"/>
</Path>
<Path name = "/AddIns/DefaultTextEditor/CodeCompletion">
<CodeCompletionBinding
id = "Xml"
extensions = ".xml;.xsl;.xslt;.xsd;.manifest;.config;.addin;.xshd;.wxs;.wxi;.wxl;.proj;.csproj;.vbproj;.ilproj;.build;.xfrm;.targets;.xpt;.xft;.map;.wsdl;.disco"
class = "ICSharpCode.XmlBinding.XmlCodeCompletionBinding"
class = "ICSharpCode.XmlEditor.XmlCodeCompletionBinding"
/>
</Path>
@ -27,14 +27,14 @@ @@ -27,14 +27,14 @@
<DisplayBinding id = "XmlTreeView"
type = "Secondary"
insertbefore = "Text"
class = "ICSharpCode.XmlBinding.Gui.XmlDisplayBinding"/>
class = "ICSharpCode.XmlEditor.Gui.XmlDisplayBinding"/>
</Path>
<!-- Xml parser used to initiate the folding update -->
<Path name = "/Workspace/Parser">
<Parser id = "XmlFoldingParser"
supportedextensions = ".xml;.xsl;.xslt;.xsd;.manifest;.config;.addin;.xshd;.wxs;.wxi;.wxl;.proj;.csproj;.vbproj;.ilproj;.build;.xfrm;.targets;.xpt;.xft;.map;.wsdl;.disco"
class = "ICSharpCode.XmlBinding.Parser.Parser"/>
class = "ICSharpCode.XmlEditor.Parser.Parser"/>
</Path>
<!-- Extra project browser icons -->
@ -58,7 +58,15 @@ @@ -58,7 +58,15 @@
<!-- XML menu -->
<Path name = "/SharpDevelop/Workbench/MainMenu">
<Condition name = "WindowActive" activewindow="ICSharpCode.XmlEditor.XmlView">
<ComplexCondition>
<Or>
<Condition name = "WindowActive" activewindow="ICSharpCode.XmlEditor.XmlTreeView" />
<And>
<Condition name = "WindowActive" activewindow="ICSharpCode.SharpDevelop.Editor.ITextEditorProvider" />
<Condition name = "TextContent" textcontent="XML" />
</And>
</Or>
<MenuItem id = "Xml" insertafter="View" insertbefore="Tools" label="&amp;XML" type = "Menu">
<MenuItem id = "CreateSchema"
label = "${res:ICSharpCode.XmlEditor.CreateSchemaMenuLabel}"
@ -95,7 +103,7 @@ @@ -95,7 +103,7 @@
label = "${res:XML.MainMenu.EditMenu.FormatMenu}"
class = "ICSharpCode.XmlEditor.FormatXmlCommand" />
</MenuItem>
</Condition>
</ComplexCondition>
</Path>
<!-- Right click menu -->
@ -157,12 +165,12 @@ @@ -157,12 +165,12 @@
<OptionPanel id = "XmlSchemasPanel"
insertafter = "Markers"
label = "${res:ICSharpCode.XmlEditor.XmlSchemasPanel.Title}"
class = "ICSharpCode.XmlBinding.Gui.Dialogs.XmlSchemasPanel" />
class = "ICSharpCode.XmlEditor.Gui.Dialogs.XmlSchemasPanel" />
<OptionPanel id = "XmlEditorOptionsPanel"
insertafter = "Markers"
insertbefore = "XmlSchemasPanel"
label = "${res:ICSharpCode.XmlEditor.XmlEditorOptionsPanel.Title}"
class = "ICSharpCode.XmlBinding.Gui.Dialogs.XmlEditorOptionsPanel" />
class = "ICSharpCode.XmlEditor.Gui.Dialogs.XmlEditorOptionsPanel" />
</Path>
<Path path = "/AddIns/XmlEditor/EditActions">

51
src/AddIns/BackendBindings/XmlBinding/XmlBinding.csproj → src/AddIns/BackendBindings/XmlBinding/XmlEditor.csproj

@ -4,8 +4,8 @@ @@ -4,8 +4,8 @@
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<OutputType>Library</OutputType>
<RootNamespace>ICSharpCode.XmlBinding</RootNamespace>
<AssemblyName>XmlBinding</AssemblyName>
<RootNamespace>ICSharpCode.XmlEditor</RootNamespace>
<AssemblyName>XmlEditor</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<SourceAnalysisOverrideSettingsFile>C:\Users\Siegfried\AppData\Roaming\ICSharpCode/SharpDevelop3.0\Settings.SourceAnalysis</SourceAnalysisOverrideSettingsFile>
<AllowUnsafeBlocks>False</AllowUnsafeBlocks>
@ -71,6 +71,8 @@ @@ -71,6 +71,8 @@
<Compile Include="Configuration\AssemblyInfo.cs" />
<Compile Include="Src\CodeCompletion\XmlCodeCompletionBinding.cs" />
<Compile Include="Src\CodeCompletion\XmlCompletionItemList.cs" />
<Compile Include="Src\CodeCompletion\XmlSchemaCompletionData.cs" />
<Compile Include="Src\CodeCompletion\XmlSchemaCompletionDataCollection.cs" />
<Compile Include="Src\Gui\Dialogs\SelectXmlSchema.xaml.cs">
<DependentUpon>SelectXmlSchema.xaml</DependentUpon>
<SubType>Code</SubType>
@ -83,11 +85,28 @@ @@ -83,11 +85,28 @@
<DependentUpon>XmlSchemasPanel.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="Src\Gui\XmlAttributePropertyDescriptor.cs" />
<Compile Include="Src\Gui\XmlAttributeTypeDescriptor.cs" />
<Compile Include="Src\Gui\XmlCharacterDataTreeNode.cs" />
<Compile Include="Src\Gui\XmlCommentTreeNode.cs" />
<Compile Include="Src\Gui\XmlEditorAddInOptions.cs" />
<Compile Include="Src\Gui\XmlElementTreeNode.cs" />
<Compile Include="Src\Gui\XmlSchemaAssociation.cs" />
<Compile Include="Src\Gui\XmlSchemaAssociationListBoxItem.cs" />
<Compile Include="Src\Gui\XmlSchemaListBoxItem.cs" />
<Compile Include="Src\Gui\XmlTextTreeNode.cs" />
<Compile Include="Src\Gui\XmlTreeEditor.cs" />
<Compile Include="Src\Gui\XmlTreeViewContainerControl.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Src\Gui\XmlTreeViewControl.cs" />
<Compile Include="Src\Gui\XmlView.cs" />
<Compile Include="Src\Gui\XPathNodeMatch.cs" />
<Compile Include="Src\Gui\XPathNodeTextMarker.cs" />
<Compile Include="Src\XmlFormattingStrategy.cs">
</Compile>
<Compile Include="Src\CodeCompletion\XmlCompletionItem.cs" />
<Compile Include="Src\CodeCompletion\XmlCompletionItemCollection.cs" />
<Compile Include="Src\CodeCompletion\XmlCompletionDataImageList.cs" />
<Compile Include="Src\CodeCompletion\XmlCompletionDataProvider.cs" />
<Compile Include="Src\Commands\AddAttributeCommand.cs" />
<Compile Include="Src\Commands\AddChildCommentCommand.cs" />
@ -128,29 +147,9 @@ @@ -128,29 +147,9 @@
<Compile Include="Src\Parser\QualifiedNameCollection.cs" />
<Compile Include="Src\Parser\XmlElementPath.cs" />
<Compile Include="Src\Parser\XmlParser.cs" />
<Compile Include="Src\Src\XmlAttributePropertyDescriptor.cs" />
<Compile Include="Src\Src\XmlAttributeTypeDescriptor.cs" />
<Compile Include="Src\Src\XmlCharacterDataTreeNode.cs" />
<Compile Include="Src\Src\XmlCommentTreeNode.cs" />
<Compile Include="Src\Src\XmlEditorAddInOptions.cs" />
<Compile Include="Src\Src\XmlElementTreeNode.cs" />
<Compile Include="Src\Src\XmlSchemaAssociation.cs" />
<Compile Include="Src\Src\XmlSchemaAssociationListBoxItem.cs" />
<Compile Include="Src\Src\XmlSchemaCompletionData.cs" />
<Compile Include="Src\Src\XmlSchemaCompletionDataCollection.cs" />
<Compile Include="Src\Src\XmlSchemaListBoxItem.cs" />
<Compile Include="Src\Src\XmlSchemaManager.cs" />
<Compile Include="Src\Src\XmlTextTreeNode.cs" />
<Compile Include="Src\Src\XmlTreeEditor.cs">
</Compile>
<Compile Include="Src\Src\XmlTreeViewContainerControl.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Src\Src\XmlTreeViewControl.cs" />
<Compile Include="Src\Src\XPathNodeMatch.cs" />
<Compile Include="Src\Src\XPathNodeTextMarker.cs" />
<Compile Include="Src\StylesheetAssignedCondition.cs" />
<Compile Include="Src\XmlFoldingStrategy.cs" />
<Compile Include="Src\XmlSchemaManager.cs" />
<Compile Include="Src\Xml\EncodedStringWriter.cs" />
<Compile Include="Src\Xml\XmlEncoder.cs" />
<Compile Include="Src\Xml\XmlNamespace.cs" />
@ -159,6 +158,10 @@ @@ -159,6 +158,10 @@
<EmbeddedResource Include="Resources\XmlTextTreeNodeIcon.png" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\Libraries\AvalonEdit\ICSharpCode.AvalonEdit\ICSharpCode.AvalonEdit.csproj">
<Project>{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}</Project>
<Name>ICSharpCode.AvalonEdit</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\Main\Base\Project\ICSharpCode.SharpDevelop.csproj">
<Project>{2748AD25-9C63-4E12-877B-4DCE96FBED54}</Project>
<Name>ICSharpCode.SharpDevelop</Name>

4
src/Main/Base/Project/Src/Gui/Dialogs/AbstractOptionPanel.cs

@ -33,7 +33,9 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -33,7 +33,9 @@ namespace ICSharpCode.SharpDevelop.Gui
}
}
public abstract void LoadOptions();
public virtual void LoadOptions()
{
}
public virtual bool SaveOptions()
{

6
src/Main/Base/Project/Src/Services/File/OpenedFile.cs

@ -104,6 +104,8 @@ namespace ICSharpCode.SharpDevelop @@ -104,6 +104,8 @@ namespace ICSharpCode.SharpDevelop
/// </summary>
public event EventHandler FileNameChanged;
public abstract event EventHandler FileClosed;
/// <summary>
/// Use this method to save the file to disk using a new name.
/// </summary>
@ -436,6 +438,8 @@ namespace ICSharpCode.SharpDevelop @@ -436,6 +438,8 @@ namespace ICSharpCode.SharpDevelop
if (registeredViews.Count == 0) {
FileService.OpenedFileClosed(this);
FileClosed.RaiseEvent(this, EventArgs.Empty);
if (fileChangeWatcher != null) {
fileChangeWatcher.Dispose();
fileChangeWatcher = null;
@ -471,5 +475,7 @@ namespace ICSharpCode.SharpDevelop @@ -471,5 +475,7 @@ namespace ICSharpCode.SharpDevelop
fileChangeWatcher.Enabled = true;
}
}
public override event EventHandler FileClosed;
}
}

14
src/Main/Base/Project/Src/TextEditor/Conditions/TextContentCondition.cs

@ -5,9 +5,10 @@ @@ -5,9 +5,10 @@
// <version>$Revision$</version>
// </file>
using ICSharpCode.SharpDevelop.Gui;
using System;
using ICSharpCode.Core;
using ICSharpCode.TextEditor;
using ICSharpCode.SharpDevelop.Editor;
namespace ICSharpCode.SharpDevelop.DefaultEditor.Conditions
{
@ -25,10 +26,13 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Conditions @@ -25,10 +26,13 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Conditions
public bool IsValid(object caller, Condition condition)
{
string textcontent = condition.Properties["textcontent"];
if (caller is TextEditorControl) {
TextEditorControl ctrl = (TextEditorControl)caller;
if (ctrl.Document != null && ctrl.Document.HighlightingStrategy != null) {
return string.Equals(textcontent, ctrl.Document.HighlightingStrategy.Name, StringComparison.OrdinalIgnoreCase);
if (caller is WpfWorkbench) {
IViewContent content = (caller as WpfWorkbench).ActiveViewContent;
if (content is ITextEditorProvider) {
var ctrl = (content as ITextEditorProvider).TextEditor.GetService(typeof(AvalonEdit.TextEditor)) as AvalonEdit.TextEditor;
if (ctrl != null && ctrl.SyntaxHighlighting.Name != null) {
return string.Equals(textcontent, ctrl.SyntaxHighlighting.Name, StringComparison.OrdinalIgnoreCase);
}
}
}
return false;

2
src/Main/Base/Project/Src/Util/WpfSynchronizeInvoke.cs

@ -35,7 +35,7 @@ namespace ICSharpCode.SharpDevelop @@ -35,7 +35,7 @@ namespace ICSharpCode.SharpDevelop
public IAsyncResult BeginInvoke(Delegate method, object[] args)
{
DispatcherOperation op;
if (args.Length == 0)
if (args == null || args.Length == 0)
op = dispatcher.BeginInvoke(DispatcherPriority.Normal, method);
else if (args.Length == 1)
op = dispatcher.BeginInvoke(DispatcherPriority.Normal, method, args[0]);

5
src/Main/ICSharpCode.Core.Presentation/LocalizeExtension.cs

@ -31,9 +31,4 @@ namespace ICSharpCode.Core.Presentation @@ -31,9 +31,4 @@ namespace ICSharpCode.Core.Presentation
return ResourceService.GetString(key);
}
}
}

284
src/SharpDevelop.sln

@ -1,172 +1,172 @@ @@ -1,172 +1,172 @@

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

Loading…
Cancel
Save