From bf9be4201b6250fab051fb8db65c74859615c2f4 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Mon, 17 Oct 2005 14:38:41 +0000 Subject: [PATCH] Add list with documentation about the doozers. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@590 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- doc/technotes/ConditionList.html | 68 ++ doc/technotes/DoozerList.html | 802 ++++++++++++++++++ doc/technotes/listing.css | 50 ++ .../Boo/BooBinding/Project/BooBinding.addin | 9 +- .../Project/SubversionAddIn.csproj | 2 +- .../Project/Src/Actions/FormatActions.cs | 6 +- .../Project/Src/Gui/TextArea.cs | 2 +- .../Expressions/BinaryOperatorExpression.cs | 2 +- .../Src/Dom/Implementations/NullReturnType.cs | 2 +- .../Project/Src/Gui/AbstractViewContent.cs | 2 +- .../BrowserDisplayBinding/SchemeExtension.cs | 13 + .../Gui/Components/ExtTreeView/ExtTreeNode.cs | 8 +- .../Project/Src/Gui/Dialogs/NewFileDialog.cs | 2 +- .../Src/Gui/Dialogs/Wizard/WizardDialog.cs | 2 +- .../Doozers/DefaultDialogPanelDescriptor.cs | 15 +- .../Src/Internal/Doozers/DialogPanelDoozer.cs | 19 +- .../Src/Internal/Doozers/DirectoryDoozer.cs | 2 + .../Project/Src/Internal/Doozers/PadDoozer.cs | 29 + .../Src/Services/Debugger/DebuggerDoozer.cs | 25 + .../DisplayBindingDescriptor.cs | 9 +- .../DisplayBinding/DisplayBindingDoozer.cs | 22 + .../LanguageBinding/LanguageBindingDoozer.cs | 19 + .../ParserService/Doozer/ParserDescriptor.cs | 4 +- .../ParserService/Doozer/ParserDoozer.cs | 16 + .../Src/TextEditor/Codons/EditActionDoozer.cs | 14 + .../Src/TextEditor/Codons/SyntaxModeDoozer.cs | 18 + .../Gui/Editor/CodeCompletionBinding.cs | 16 + .../AddIn/DefaultDoozers/ClassDoozer.cs | 1 + .../AddIn/DefaultDoozers/FileFilterDoozer.cs | 1 + .../AddIn/DefaultDoozers/Icon/IconDoozer.cs | 1 + .../AddIn/DefaultDoozers/IncludeDoozer.cs | 1 + .../DefaultDoozers/MenuItem/MenuItemDoozer.cs | 4 + .../ToolBarItem/ToolBarItemDoozer.cs | 1 + .../BuildAddinDocumentation.csproj | 34 + .../BuildAddinDocumentation.sln | 6 + .../BuildAddinDocumentation/MainClass.cs | 186 ++++ 36 files changed, 1388 insertions(+), 25 deletions(-) create mode 100644 doc/technotes/ConditionList.html create mode 100644 doc/technotes/DoozerList.html create mode 100644 doc/technotes/listing.css create mode 100644 src/Tools/BuildAddinDocumentation/BuildAddinDocumentation.csproj create mode 100644 src/Tools/BuildAddinDocumentation/BuildAddinDocumentation.sln create mode 100644 src/Tools/BuildAddinDocumentation/MainClass.cs diff --git a/doc/technotes/ConditionList.html b/doc/technotes/ConditionList.html new file mode 100644 index 0000000000..eb125dd52d --- /dev/null +++ b/doc/technotes/ConditionList.html @@ -0,0 +1,68 @@ + + Condition List + + + +

Condition List

+

This file was generated by the tool 'BuildAddinDocumentation'. +It is based on SharpDevelop 2.0.0.589.

+ +
+

BrowserLocation

+

+ Conditions that tries to match the URL of a with a regex. +

+ + + + + +
Condition name: + ICSharpCode.SharpDevelop.BrowserDisplayBinding.BrowserLocationConditionEvaluator

Attributes:

+
+
+

Compare

+

+ Condition evaluator that compares two strings. +

+ + + + + +
Condition name: + ICSharpCode.Core.CompareConditionEvaluator

Attributes:

+
+
+

OpenWindowState

+

+ Description of WindowStateCondition. +

+ + + + + +
Condition name: + ICSharpCode.Core.OpenWindowStateConditionEvaluator

Attributes:

+
+
+

OwnerState

+

+ Condition evaluator that compares the state of the caller/owner with a specified value. + The caller/owner has to implement . +

+ + + + + +
Condition name: + ICSharpCode.Core.OwnerStateConditionEvaluator

Attributes:

+
+ diff --git a/doc/technotes/DoozerList.html b/doc/technotes/DoozerList.html new file mode 100644 index 0000000000..df77f6a8f6 --- /dev/null +++ b/doc/technotes/DoozerList.html @@ -0,0 +1,802 @@ + + Doozer List + + + +

Doozer List

+

This file was generated by the tool 'BuildAddinDocumentation'. +It is based on SharpDevelop 2.0.0.589.

+ +
+

Class

+

+ Creates object instances by invocing a type's parameterless constructor + via System.Reflection. +

+ + + + + + + + + + + + + + + +
Doozer name: + ICSharpCode.Core.ClassDoozer

Attributes:

class: + + The fully qualified type name of the attribute to create. +

Usage: + Everywhere where objects are expected.
Returns: + + Any kind of object. +
+
+
+

CodeCompletionBinding

+

+ Creates code completion bindings that manage code completion for one language. +

+ + + + + + + + + + + + + + + + + + +
Doozer name: + ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor.CodeCompletionBindingDoozer

Attributes:

extensions: + + Optional, list of semicolon-separated entries of the file extensions handled by the binding. + If no extensions attribute is specified, the binding is activated in all files. +
class: + + Name of the ICodeCompletionBinding class (normally deriving from DefaultCodeCompletionBinding). +

Usage: + Only in /AddIns/DefaultTextEditor/CodeCompletion
Returns: + + The ICodeCompletionBinding class specified with the 'class' attribute, or a + wrapper that lazy-loads the actual class when it is used in a file with the specified + extension. +
+
+
+

Debugger

+

+ Creates debuggers. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Doozer name: + ICSharpCode.Core.DebuggerDoozer

Attributes:

supportsStart: + + Specifies if the debugger supports the 'Start' command. Default: true +
supportsStartWithoutDebugger: + + Specifies if the debugger supports the 'StartWithoutDebugger' command. Default: true +
supportsStop: + + Specifies if the debugger supports the 'Stop' (kill running process) command. Default: true +
supportsStepping: + + Specifies if the debugger supports stepping. Default: false +
supportsExecutionControl: + + Specifies if the debugger supports execution control (break, resume). Default: false +
class: + + Name of the IDebugger class. +

Usage: + Only in /SharpDevelop/Services/DebuggerService/Debugger
Returns: + + An DebuggerDescriptor object that exposes the attributes and the IDebugger object (lazy-loading). +
+
+
+

DialogPanel

+

+ Creates DefaultDialogPanelDescriptor objects that are used in option dialogs. +

+ + + + + + + + + + + + + + + + + + + + + +
Doozer name: + ICSharpCode.Core.DialogPanelDoozer

Attributes:

class: + + Name of the IDialogPanel class. Optional if the page has subpages. +
label: + + Caption of the dialog panel. +

Children: + + In the SharpDevelop options, option pages can have subpages by specifying them + as children in the AddInTree. +
Usage: + In /SharpDevelop/BackendBindings/ProjectOptions/ and /SharpDevelop/Dialogs/OptionsDialog
Returns: + + A DefaultDialogPanelDescriptor object. +
+
+
+

Directory

+

+ Creates path names using a relative to the folder containing the addin file. +

+ + + + + + + + + + + + + + + +
Doozer name: + ICSharpCode.Core.DirectoryDoozer

Attributes:

path: + + Path relative to the directory which contains the .addin file defining the codon. +

Usage: + Where directory paths to a folder inside the addin directory are expected, e.g. + /SharpDevelop/BackendBindings/Templates
Returns: + + A string containing the full path name. +
+
+
+

DisplayBinding

+

+ Creates DisplayBindingDescriptor objects. +

+ + + + + + + + + + + + + + + + + + + + + + + + +
Doozer name: + ICSharpCode.Core.DisplayBindingDoozer

Attributes:

class: + + Name of the IDisplayBinding or ISecondaryDisplayBinding class. +
type: + + Type of the display binding (either "Primary" or "Secondary"). Default: "Primary". +
fileNamePattern: + + Optional. Regular expression that specifies the file names for which the display binding + will be used. Example: "\.res(x|ources)$" +
languagePattern: + + Optional. Regular expression that specifies the language for which the display binding + will be used. Example: "\Resource Files$" +

Usage: + Only in /SharpDevelop/Workbench/DisplayBindings
Returns: + + An DisplayBindingDescriptor object that wraps either a IDisplayBinding + or a ISecondaryDisplayBinding object. +
+
+
+

EditAction

+

+ Creates IEditAction objects for the text editor. +

+ + + + + + + + + + + + + + + + + + +
Doozer name: + ICSharpCode.SharpDevelop.DefaultEditor.Codons.EditActionDoozer

Attributes:

keys: + + Comma-separated list of keyboard shortcuts that activate the edit action. + E.g. "Control|C,Control|Insert" +
class: + + Name of the IEditAction class. +

Usage: + Only in /AddIns/DefaultTextEditor/EditActions
Returns: + + An IEditAction object. +
+
+
+

FileFilter

+

+ Creates file filter entries for OpenFileDialogs or SaveFileDialogs. +

+ + + + + + + + + + + + + + + + + + +
Doozer name: + ICSharpCode.Core.FileFilterDoozer

Attributes:

name: + + The name of the file filter entry. +
extensions: + + The extensions associated with this file filter entry. +

Usage: + Only in /SharpDevelop/Workbench/FileFilter
Returns: + + String in the format "name|extensions". +
+
+
+

Icon

+

+ Creates associations between file types or node types in the project browser and + icons in the resource service. +

+ + + + + + + + + + + + + + + + + + + + + +
Doozer name: + ICSharpCode.Core.IconDoozer

Attributes:

resource: + + This attribute must be specified. It is the name of a bitmap resource + in the resource service. +
language: + + This attribute is specified when a project icon association should be created. + It specifies the language of the project types that use the icon. +
extensions: + + This attribute is specified when a file icon association should be created. + It specifies the semicolon-separated list of file types that use the icon. +

Usage: + Only in /Workspace/Icons
Returns: + + An IconDescriptor object that exposes the attributes. +
+
+
+

Include

+

+ Builds one or multiple items from another location in the addin tree. + This doozer can use the "item" OR the "path" attribute. +

+ + + + + + + + + + + + + + + + + + +
Doozer name: + ICSharpCode.Core.IncludeDoozer

Attributes:

item: + + When this attribute is used, the include doozer builds the item that is at the + addin tree location specified by this attribute. +
path: + + When this attribute is used, the include doozer builds all items inside the + path addin tree location specified by this attribute and returns an + which includes all items in the output list. +

Usage: + Everywhere
Returns: + + Any object, depending on the included codon(s). +
+
+
+

LanguageBinding

+

+ Creates LanguageBindingDescriptor objects for the project service. +

+ + + + + + + + + + + + + + + + + + + + + + + + +
Doozer name: + ICSharpCode.Core.LanguageBindingDoozer

Attributes:

guid: + + Project type GUID of the project used by MsBuild. +
supportedextensions: + + Semicolon-separated list of file extensions that are compilable files in the project. (e.g. ".boo") +
projectfileextension: + + File extension of project files. (e.g. ".booproj") +
class: + + Name of the ILanguageBinding class. +

Usage: + Only in /SharpDevelop/Workbench/LanguageBindings
Returns: + + An LanguageBindingDescriptor object that wraps the ILanguageBinding object. +
+
+
+

MenuItem

+

+ Creates menu items from a location in the addin tree. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Doozer name: + ICSharpCode.Core.MenuItemDoozer

Attributes:

type: + + This attribute must be specified and one of these values: + Separator, CheckBox, Item=Command, Menu (=with subitems), + Builder (=class implementing ISubmenuBuilder) +
loadclasslazy: + + Only for the type "Item"/"Command". + When set to false, the command class is loaded + immediately instead of the usual lazy-loading. +
icon: + + Icon of the menu item. +
label: + + Label of the menu item. +
class: + + Command class that is run when item is clicked. +

Children: + + If "type" is "Menu", the item can have sub-menuitems. +
Usage: + Any menu strip paths or context menu paths, e.g. /SharpDevelop/Workbench/MainMenu
Returns: + + A ToolStrip* object, depending on the type attribute. +
Conditions: + MenuMode
+
+
+

Pad

+

+ Creates PadDescriptor objects for SharpDevelop pads. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Doozer name: + ICSharpCode.Core.PadDoozer

Attributes:

title: + + Title of the pad that is shown in the user interface. + Should be a resource string, e.g. "${res:AddIns.HtmlHelp2.Contents}" +
icon: + + Optional, specifies the name of the icon resource used for the pad. + Pad icon resources must be registered with the ResourceService before the + workbench is loaded! +
category: + + Category of the pad. It is possible to create menu items that automatically + contain show commands for all pads in a certain category. + Pads in the category "Main" will show up in the "View" menu, the category + "Tools" in the "View -> Tools" menu, the category "Debugger" in the + "View -> Debugger" menu. +
shortcut: + + Shortcut that activates the 'Show pad' command (e.g. "Control|Alt|T"). +
class: + + IPadContent class that is loaded when the pad content is shown for the first time. +

Usage: + Only in /Workspace/Parser
Returns: + + An PadDescriptor object that wraps the IPadContent object. +
+
+
+

Parser

+

+ Creates ParserDescriptor objects for the parsing service. +

+ + + + + + + + + + + + + + + + + + + + + +
Doozer name: + ICSharpCode.Core.ParserDoozer

Attributes:

supportedextensions: + + Semicolon-separated list of file extensions for which the parser is used. (e.g. ".boo") +
projectfileextension: + + File extension of project files. (e.g. ".booproj") +
class: + + Name of the IParser class. +

Usage: + Only in /Workspace/Parser
Returns: + + An ParserDescriptor object that wraps the IParser object. +
+
+
+

SchemeExtension

+

+ Creates browser scheme extensions that can intercept calls on one protocol. +

+ + + + + + + + + + + + + + + + + + +
Doozer name: + ICSharpCode.SharpDevelop.BrowserDisplayBinding.SchemeExtensionDoozer

Attributes:

scheme: + + Specifies the name of the protocol the extension handles. (e.g. 'ms-help' or 'startpage') +
class: + + Name of the ISchemeExtension class (normally deriving from DefaultSchemeExtension). +

Usage: + Only in /SharpDevelop/Views/Browser/SchemeExtensions
Returns: + + An SchemeExtensionDescriptor object that exposes the protocol name and ISchemeExtension object (lazy-loading). +
+
+
+

SyntaxMode

+

+ Creates AddInTreeSyntaxMode objects that wrap a .xshd syntax mode stored as resource in the + addin assembly. +

+ + + + + + + + + + + + + + + + + + + + + +
Doozer name: + ICSharpCode.SharpDevelop.DefaultEditor.Codons.SyntaxModeDoozer

Attributes:

name: + + Name of the language for which the syntax mode is used. +
extensions: + + Semicolon-separated list of file extensions for which the syntax mode is used. +
resource: + + Fully qualified name of the resource file. +

Usage: + Only in /SharpDevelop/ViewContent/DefaultTextEditor/SyntaxModes
Returns: + + An AddInTreeSyntaxMode object that loads the resource from the addin assembly when + its CreateTextReader method is called. +
+
+
+

ToolbarItem

+

+ Creates tool bar items from a location in the addin tree. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Doozer name: + ICSharpCode.Core.ToolbarItemDoozer

Attributes:

type: + + This attribute must be specified and one of these values: + Separator, CheckBox, Item, ComboBox, DropDownButton +
loadclasslazy: + + Only for the type "Item". When set to false, the command class is loaded + immediately instead of the usual lazy-loading. +
icon: + + Icon of the tool bar item. +
tooltip: + + Tooltip of the tool bar item. +
class: + + Command class that is run when item is clicked; or class that manages + the ComboBox/DropDownButton. +

Usage: + Any toolbar strip paths, e.g. /SharpDevelop/Workbench/ToolBar
Returns: + + A ToolStrip* object, depending on the type attribute. +
Conditions: + MenuMode
+
+ diff --git a/doc/technotes/listing.css b/doc/technotes/listing.css new file mode 100644 index 0000000000..f9e7bc0b62 --- /dev/null +++ b/doc/technotes/listing.css @@ -0,0 +1,50 @@ +body, td, th { + font-family: Verdana, Arial, Helvetica; + font-size: 10pt; + color: #000000; + background-color: #ffffff; +} +.notice { + font-size: 75%; + color: #606060; +} +th { + vertical-align: top; + text-align: left; +} +h1 { + font-size: 200%; +} +h2 { + font-size: 150%; + text-decoration: bold; + margin-top: 0px; + margin-bottom: 0px; +} +h3 { + font-size: 110%; + margin-top: 0px; +} +div { + border: 1px solid #ccccff; + background: #fafaff; + padding-left: 4px; + padding-right: 10px; + padding-top: 4px; + margin-top: 4px; + margin-bottom: 4px; +} +td, th { + background: #fdfdfd; +} +table { + border: 1px solid #ccccff; + width: 100%; + margin-bottom: 4px; +} +hr { + border: 0px; + color: #ccccff; + background-color: #ccccff; + height: 1px; +} diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.addin b/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.addin index 4480dac1e5..3410dde9fd 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.addin +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.addin @@ -56,10 +56,11 @@ - + diff --git a/src/AddIns/Misc/SubversionAddIn/Project/SubversionAddIn.csproj b/src/AddIns/Misc/SubversionAddIn/Project/SubversionAddIn.csproj index 9e601271e1..78e60cf0a9 100644 --- a/src/AddIns/Misc/SubversionAddIn/Project/SubversionAddIn.csproj +++ b/src/AddIns/Misc/SubversionAddIn/Project/SubversionAddIn.csproj @@ -9,7 +9,7 @@ $(MSBuildProjectDirectory)\PostBuildEvent.bat "$(MSBuildProjectDirectory)" 8.0.50215 2.0 - OnOutputUpdated + OnSuccessfulBuild True diff --git a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Actions/FormatActions.cs b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Actions/FormatActions.cs index 81d71e6a35..dd637217bf 100644 --- a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Actions/FormatActions.cs +++ b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Actions/FormatActions.cs @@ -208,9 +208,9 @@ namespace ICSharpCode.TextEditor.Actions for (int i = y2; i >= y1; --i) { LineSegment line = document.GetLineSegment(i); if(line.Length > 0) { - /// note: some users may prefer a more radical ConvertLeadingSpacesToTabs that - /// means there can be no spaces before the first character even if the spaces - /// didn't add up to a whole number of tabs + // note: some users may prefer a more radical ConvertLeadingSpacesToTabs that + // means there can be no spaces before the first character even if the spaces + // didn't add up to a whole number of tabs string newLine = TextUtilities.LeadingWhiteSpaceToTabs(document.GetText(line.Offset,line.Length), document.TextEditorProperties.TabIndent); document.Replace(line.Offset,line.Length,newLine); ++redocounter; diff --git a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextArea.cs b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextArea.cs index cf16f9c6e1..37fc0a7e7a 100644 --- a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextArea.cs +++ b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextArea.cs @@ -435,7 +435,7 @@ namespace ICSharpCode.TextEditor /// /// This method is called on each Keypress - /// + /// /// /// True, if the key is handled by this method and should NOT be /// inserted in the textarea. diff --git a/src/Libraries/NRefactory/Project/Src/Parser/AST/General/Expressions/BinaryOperatorExpression.cs b/src/Libraries/NRefactory/Project/Src/Parser/AST/General/Expressions/BinaryOperatorExpression.cs index 14d1335a3c..2017869cb0 100644 --- a/src/Libraries/NRefactory/Project/Src/Parser/AST/General/Expressions/BinaryOperatorExpression.cs +++ b/src/Libraries/NRefactory/Project/Src/Parser/AST/General/Expressions/BinaryOperatorExpression.cs @@ -53,7 +53,7 @@ namespace ICSharpCode.NRefactory.Parser.AST DivideInteger, /// VB-only: ^ Power, - /// VB-only: & + /// VB-only: & Concat, /// C#: << diff --git a/src/Main/Base/Project/Src/Dom/Implementations/NullReturnType.cs b/src/Main/Base/Project/Src/Dom/Implementations/NullReturnType.cs index 6b414cb813..35903dbd77 100644 --- a/src/Main/Base/Project/Src/Dom/Implementations/NullReturnType.cs +++ b/src/Main/Base/Project/Src/Dom/Implementations/NullReturnType.cs @@ -11,8 +11,8 @@ using ICSharpCode.Core; namespace ICSharpCode.SharpDevelop.Dom { - [Serializable] /// The type of the 'null'/'nothing' literal. + [Serializable] public sealed class NullReturnType : AbstractReturnType { public static readonly NullReturnType Instance = new NullReturnType(); diff --git a/src/Main/Base/Project/Src/Gui/AbstractViewContent.cs b/src/Main/Base/Project/Src/Gui/AbstractViewContent.cs index dd47575de8..e33dd9e3ad 100644 --- a/src/Main/Base/Project/Src/Gui/AbstractViewContent.cs +++ b/src/Main/Base/Project/Src/Gui/AbstractViewContent.cs @@ -133,7 +133,7 @@ namespace ICSharpCode.SharpDevelop.Gui } /// - /// Sets the file name to and the title to the file name without path. Sets dirty == false too. + /// Sets the file name to and the title to the file name without path. Sets dirty == false too. /// /// The name of the file currently inside the content. protected void SetTitleAndFileName(string fileName) diff --git a/src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/SchemeExtension.cs b/src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/SchemeExtension.cs index 0060666094..2fd710e048 100644 --- a/src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/SchemeExtension.cs +++ b/src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/SchemeExtension.cs @@ -70,6 +70,19 @@ namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding } } + /// + /// Creates browser scheme extensions that can intercept calls on one protocol. + /// + /// + /// Specifies the name of the protocol the extension handles. (e.g. 'ms-help' or 'startpage') + /// + /// + /// Name of the ISchemeExtension class (normally deriving from DefaultSchemeExtension). + /// + /// Only in /SharpDevelop/Views/Browser/SchemeExtensions + /// + /// An SchemeExtensionDescriptor object that exposes the protocol name and ISchemeExtension object (lazy-loading). + /// public class SchemeExtensionDoozer : IDoozer { /// diff --git a/src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeNode.cs b/src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeNode.cs index 3818be9131..dff31a3593 100644 --- a/src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeNode.cs +++ b/src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeNode.cs @@ -322,7 +322,7 @@ namespace ICSharpCode.SharpDevelop.Gui #region Drag and Drop /// - /// Generates a Drag & Drop data object. If this property returns null + /// Generates a Drag & Drop data object. If this property returns null /// the node indicates that it can't be dragged. /// public virtual DataObject DragDropDataObject { @@ -332,14 +332,14 @@ namespace ICSharpCode.SharpDevelop.Gui } /// - /// Gets the drag & drop effect, when a DataObject is dragged over this node. + /// Gets the drag & drop effect, when a DataObject is dragged over this node. /// /// /// The default effect DragDropEffects.Copy and DragDropEffects.Move, depending on the - /// key the user presses while performing d&d. + /// key the user presses while performing d&d. /// /// - /// DragDropEffects.None when no drag&drop can occur. + /// DragDropEffects.None when no drag&drop can occur. /// public virtual DragDropEffects GetDragDropEffect(IDataObject dataObject, DragDropEffects proposedEffect) { diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/NewFileDialog.cs b/src/Main/Base/Project/Src/Gui/Dialogs/NewFileDialog.cs index ce40776ced..57070061de 100644 --- a/src/Main/Base/Project/Src/Gui/Dialogs/NewFileDialog.cs +++ b/src/Main/Base/Project/Src/Gui/Dialogs/NewFileDialog.cs @@ -31,7 +31,7 @@ namespace ICSharpCode.SharpDevelop.Gui { /// /// This class is for creating a new "empty" file - /// public class NewFileDialog : BaseSharpDevelopForm, INewFileCreator { ArrayList alltemplates = new ArrayList(); diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/Wizard/WizardDialog.cs b/src/Main/Base/Project/Src/Gui/Dialogs/Wizard/WizardDialog.cs index b9a1ae6760..151930337d 100644 --- a/src/Main/Base/Project/Src/Gui/Dialogs/Wizard/WizardDialog.cs +++ b/src/Main/Base/Project/Src/Gui/Dialogs/Wizard/WizardDialog.cs @@ -87,7 +87,7 @@ namespace ICSharpCode.SharpDevelop.Gui return nextID; } - /// returns true, if all dialog panels could be finished + /// returns true, if all dialog panels could be finished bool CanFinish { get { int currentNr = 0; diff --git a/src/Main/Base/Project/Src/Internal/Doozers/DefaultDialogPanelDescriptor.cs b/src/Main/Base/Project/Src/Internal/Doozers/DefaultDialogPanelDescriptor.cs index 0c29fa8880..1cab0b7895 100644 --- a/src/Main/Base/Project/Src/Internal/Doozers/DefaultDialogPanelDescriptor.cs +++ b/src/Main/Base/Project/Src/Internal/Doozers/DefaultDialogPanelDescriptor.cs @@ -42,8 +42,18 @@ namespace ICSharpCode.Core } } + AddIn addin; + string dialogPanelPath; + public IDialogPanel DialogPanel { get { + if (dialogPanelPath != null) { + if (dialogPanel == null) { + dialogPanel = (IDialogPanel)addin.CreateObject(dialogPanelPath); + } + dialogPanelPath = null; + addin = null; + } return dialogPanel; } set { @@ -62,9 +72,10 @@ namespace ICSharpCode.Core this.dialogPanelDescriptors = dialogPanelDescriptors; } - public DefaultDialogPanelDescriptor(string id, string label, IDialogPanel dialogPanel) : this(id, label) + public DefaultDialogPanelDescriptor(string id, string label, AddIn addin, string dialogPanelPath) : this(id, label) { - this.dialogPanel = dialogPanel; + this.addin = addin; + this.dialogPanelPath = dialogPanelPath; } } } diff --git a/src/Main/Base/Project/Src/Internal/Doozers/DialogPanelDoozer.cs b/src/Main/Base/Project/Src/Internal/Doozers/DialogPanelDoozer.cs index e027b80a26..0a3575b2cf 100644 --- a/src/Main/Base/Project/Src/Internal/Doozers/DialogPanelDoozer.cs +++ b/src/Main/Base/Project/Src/Internal/Doozers/DialogPanelDoozer.cs @@ -11,6 +11,23 @@ using System.Reflection; namespace ICSharpCode.Core { + /// + /// Creates DefaultDialogPanelDescriptor objects that are used in option dialogs. + /// + /// + /// Name of the IDialogPanel class. Optional if the page has subpages. + /// + /// + /// Caption of the dialog panel. + /// + /// + /// In the SharpDevelop options, option pages can have subpages by specifying them + /// as children in the AddInTree. + /// + /// In /SharpDevelop/BackendBindings/ProjectOptions/ and /SharpDevelop/Dialogs/OptionsDialog + /// + /// A DefaultDialogPanelDescriptor object. + /// public class DialogPanelDoozer : IDoozer { /// @@ -33,7 +50,7 @@ namespace ICSharpCode.Core if (subItems == null || subItems.Count == 0) { if (codon.Properties.Contains("class")) { - return new DefaultDialogPanelDescriptor(codon.Id, StringParser.Parse(label), (IDialogPanel)codon.AddIn.CreateObject(codon.Properties["class"])); + return new DefaultDialogPanelDescriptor(codon.Id, StringParser.Parse(label), codon.AddIn, codon.Properties["class"]); } else { return new DefaultDialogPanelDescriptor(codon.Id, StringParser.Parse(label)); } diff --git a/src/Main/Base/Project/Src/Internal/Doozers/DirectoryDoozer.cs b/src/Main/Base/Project/Src/Internal/Doozers/DirectoryDoozer.cs index 434913586e..c6aba0a4d4 100644 --- a/src/Main/Base/Project/Src/Internal/Doozers/DirectoryDoozer.cs +++ b/src/Main/Base/Project/Src/Internal/Doozers/DirectoryDoozer.cs @@ -17,6 +17,8 @@ namespace ICSharpCode.Core /// /// Path relative to the directory which contains the .addin file defining the codon. /// + /// Where directory paths to a folder inside the addin directory are expected, e.g. + /// /SharpDevelop/BackendBindings/Templates /// /// A string containing the full path name. /// diff --git a/src/Main/Base/Project/Src/Internal/Doozers/PadDoozer.cs b/src/Main/Base/Project/Src/Internal/Doozers/PadDoozer.cs index bea764741a..7eae3dfb82 100644 --- a/src/Main/Base/Project/Src/Internal/Doozers/PadDoozer.cs +++ b/src/Main/Base/Project/Src/Internal/Doozers/PadDoozer.cs @@ -12,6 +12,35 @@ using ICSharpCode.SharpDevelop.Gui; namespace ICSharpCode.Core { + /// + /// Creates PadDescriptor objects for SharpDevelop pads. + /// + /// + /// Title of the pad that is shown in the user interface. + /// Should be a resource string, e.g. "${res:AddIns.HtmlHelp2.Contents}" + /// + /// + /// Optional, specifies the name of the icon resource used for the pad. + /// Pad icon resources must be registered with the ResourceService before the + /// workbench is loaded! + /// + /// + /// Category of the pad. It is possible to create menu items that automatically + /// contain show commands for all pads in a certain category. + /// Pads in the category "Main" will show up in the "View" menu, the category + /// "Tools" in the "View -> Tools" menu, the category "Debugger" in the + /// "View -> Debugger" menu. + /// + /// + /// Shortcut that activates the 'Show pad' command (e.g. "Control|Alt|T"). + /// + /// + /// IPadContent class that is loaded when the pad content is shown for the first time. + /// + /// Only in /Workspace/Parser + /// + /// An PadDescriptor object that wraps the IPadContent object. + /// public class PadDoozer : IDoozer { /// diff --git a/src/Main/Base/Project/Src/Services/Debugger/DebuggerDoozer.cs b/src/Main/Base/Project/Src/Services/Debugger/DebuggerDoozer.cs index 9472873951..3b074f479a 100644 --- a/src/Main/Base/Project/Src/Services/Debugger/DebuggerDoozer.cs +++ b/src/Main/Base/Project/Src/Services/Debugger/DebuggerDoozer.cs @@ -10,6 +10,31 @@ using System.Collections; namespace ICSharpCode.Core { + /// + /// Creates debuggers. + /// + /// + /// Specifies if the debugger supports the 'Start' command. Default: true + /// + /// + /// Specifies if the debugger supports the 'StartWithoutDebugger' command. Default: true + /// + /// + /// Specifies if the debugger supports the 'Stop' (kill running process) command. Default: true + /// + /// + /// Specifies if the debugger supports stepping. Default: false + /// + /// + /// Specifies if the debugger supports execution control (break, resume). Default: false + /// + /// + /// Name of the IDebugger class. + /// + /// Only in /SharpDevelop/Services/DebuggerService/Debugger + /// + /// An DebuggerDescriptor object that exposes the attributes and the IDebugger object (lazy-loading). + /// public class DebuggerDoozer : IDoozer { /// diff --git a/src/Main/Base/Project/Src/Services/DisplayBinding/DisplayBindingDescriptor.cs b/src/Main/Base/Project/Src/Services/DisplayBinding/DisplayBindingDescriptor.cs index 18a417e2b0..c0a18a85ca 100644 --- a/src/Main/Base/Project/Src/Services/DisplayBinding/DisplayBindingDescriptor.cs +++ b/src/Main/Base/Project/Src/Services/DisplayBinding/DisplayBindingDescriptor.cs @@ -40,9 +40,11 @@ namespace ICSharpCode.Core } } + bool isSecondary; + public bool IsSecondary { get { - return codon.Properties["type"] == "Secondary"; + return isSecondary; } } @@ -51,9 +53,12 @@ namespace ICSharpCode.Core return codon; } } - + public DisplayBindingDescriptor(Codon codon) { + isSecondary = codon.Properties["type"] == "Secondary"; + if (!isSecondary && codon.Properties["type"] != "" && codon.Properties["type"] != "Primary") + MessageService.ShowWarning("Unknown display binding type: " + codon.Properties["type"]); this.codon = codon; } diff --git a/src/Main/Base/Project/Src/Services/DisplayBinding/DisplayBindingDoozer.cs b/src/Main/Base/Project/Src/Services/DisplayBinding/DisplayBindingDoozer.cs index 99f7a7519e..68a9ae4947 100644 --- a/src/Main/Base/Project/Src/Services/DisplayBinding/DisplayBindingDoozer.cs +++ b/src/Main/Base/Project/Src/Services/DisplayBinding/DisplayBindingDoozer.cs @@ -13,6 +13,28 @@ using ICSharpCode.Core; namespace ICSharpCode.Core { + /// + /// Creates DisplayBindingDescriptor objects. + /// + /// + /// Name of the IDisplayBinding or ISecondaryDisplayBinding class. + /// + /// + /// Type of the display binding (either "Primary" or "Secondary"). Default: "Primary". + /// + /// + /// Optional. Regular expression that specifies the file names for which the display binding + /// will be used. Example: "\.res(x|ources)$" + /// + /// + /// Optional. Regular expression that specifies the language for which the display binding + /// will be used. Example: "\Resource Files$" + /// + /// Only in /SharpDevelop/Workbench/DisplayBindings + /// + /// An DisplayBindingDescriptor object that wraps either a IDisplayBinding + /// or a ISecondaryDisplayBinding object. + /// public class DisplayBindingDoozer : IDoozer { /// diff --git a/src/Main/Base/Project/Src/Services/LanguageBinding/LanguageBindingDoozer.cs b/src/Main/Base/Project/Src/Services/LanguageBinding/LanguageBindingDoozer.cs index 193b17524d..56fffc38f3 100644 --- a/src/Main/Base/Project/Src/Services/LanguageBinding/LanguageBindingDoozer.cs +++ b/src/Main/Base/Project/Src/Services/LanguageBinding/LanguageBindingDoozer.cs @@ -14,6 +14,25 @@ using ICSharpCode.SharpDevelop.Project; namespace ICSharpCode.Core { + /// + /// Creates LanguageBindingDescriptor objects for the project service. + /// + /// + /// Project type GUID of the project used by MsBuild. + /// + /// + /// Semicolon-separated list of file extensions that are compilable files in the project. (e.g. ".boo") + /// + /// + /// File extension of project files. (e.g. ".booproj") + /// + /// + /// Name of the ILanguageBinding class. + /// + /// Only in /SharpDevelop/Workbench/LanguageBindings + /// + /// An LanguageBindingDescriptor object that wraps the ILanguageBinding object. + /// public class LanguageBindingDoozer : IDoozer { /// diff --git a/src/Main/Base/Project/Src/Services/ParserService/Doozer/ParserDescriptor.cs b/src/Main/Base/Project/Src/Services/ParserService/Doozer/ParserDescriptor.cs index e1b38a49e0..ee59748e65 100644 --- a/src/Main/Base/Project/Src/Services/ParserService/Doozer/ParserDescriptor.cs +++ b/src/Main/Base/Project/Src/Services/ParserService/Doozer/ParserDescriptor.cs @@ -52,7 +52,7 @@ namespace ICSharpCode.Core public string[] Supportedextensions { get { if (supportedExtensions == null) { - supportedExtensions = codon.Properties["supportedextensions"].ToUpper().Split(';'); + supportedExtensions = codon.Properties["supportedextensions"].ToUpperInvariant().Split(';'); } return supportedExtensions; } @@ -60,7 +60,7 @@ namespace ICSharpCode.Core public bool CanParse(string fileName) { - string fileExtension = Path.GetExtension(fileName).ToUpper(); + string fileExtension = Path.GetExtension(fileName).ToUpperInvariant(); foreach (string ext in Supportedextensions) { if (fileExtension == ext) { return true; diff --git a/src/Main/Base/Project/Src/Services/ParserService/Doozer/ParserDoozer.cs b/src/Main/Base/Project/Src/Services/ParserService/Doozer/ParserDoozer.cs index d8bfae1a97..2488e546c9 100644 --- a/src/Main/Base/Project/Src/Services/ParserService/Doozer/ParserDoozer.cs +++ b/src/Main/Base/Project/Src/Services/ParserService/Doozer/ParserDoozer.cs @@ -14,6 +14,22 @@ using ICSharpCode.SharpDevelop.Project; namespace ICSharpCode.Core { + /// + /// Creates ParserDescriptor objects for the parsing service. + /// + /// + /// Semicolon-separated list of file extensions for which the parser is used. (e.g. ".boo") + /// + /// + /// File extension of project files. (e.g. ".booproj") + /// + /// + /// Name of the IParser class. + /// + /// Only in /Workspace/Parser + /// + /// An ParserDescriptor object that wraps the IParser object. + /// public class ParserDoozer : IDoozer { /// diff --git a/src/Main/Base/Project/Src/TextEditor/Codons/EditActionDoozer.cs b/src/Main/Base/Project/Src/TextEditor/Codons/EditActionDoozer.cs index bb5a4b0c01..c7910886be 100644 --- a/src/Main/Base/Project/Src/TextEditor/Codons/EditActionDoozer.cs +++ b/src/Main/Base/Project/Src/TextEditor/Codons/EditActionDoozer.cs @@ -17,6 +17,20 @@ using ICSharpCode.TextEditor.Actions; namespace ICSharpCode.SharpDevelop.DefaultEditor.Codons { + /// + /// Creates IEditAction objects for the text editor. + /// + /// + /// Comma-separated list of keyboard shortcuts that activate the edit action. + /// E.g. "Control|C,Control|Insert" + /// + /// + /// Name of the IEditAction class. + /// + /// Only in /AddIns/DefaultTextEditor/EditActions + /// + /// An IEditAction object. + /// public class EditActionDoozer : IDoozer { /// diff --git a/src/Main/Base/Project/Src/TextEditor/Codons/SyntaxModeDoozer.cs b/src/Main/Base/Project/Src/TextEditor/Codons/SyntaxModeDoozer.cs index c70297d8e6..fb5a1e55de 100644 --- a/src/Main/Base/Project/Src/TextEditor/Codons/SyntaxModeDoozer.cs +++ b/src/Main/Base/Project/Src/TextEditor/Codons/SyntaxModeDoozer.cs @@ -42,6 +42,24 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Codons } } + /// + /// Creates AddInTreeSyntaxMode objects that wrap a .xshd syntax mode stored as resource in the + /// addin assembly. + /// + /// + /// Name of the language for which the syntax mode is used. + /// + /// + /// Semicolon-separated list of file extensions for which the syntax mode is used. + /// + /// + /// Fully qualified name of the resource file. + /// + /// Only in /SharpDevelop/ViewContent/DefaultTextEditor/SyntaxModes + /// + /// An AddInTreeSyntaxMode object that loads the resource from the addin assembly when + /// its CreateTextReader method is called. + /// public class SyntaxModeDoozer : IDoozer { /// diff --git a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CodeCompletionBinding.cs b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CodeCompletionBinding.cs index dcc6153621..38ae55e43b 100644 --- a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CodeCompletionBinding.cs +++ b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CodeCompletionBinding.cs @@ -22,6 +22,22 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor bool HandleKeyPress(SharpDevelopTextAreaControl editor, char ch); } + /// + /// Creates code completion bindings that manage code completion for one language. + /// + /// + /// Optional, list of semicolon-separated entries of the file extensions handled by the binding. + /// If no extensions attribute is specified, the binding is activated in all files. + /// + /// + /// Name of the ICodeCompletionBinding class (normally deriving from DefaultCodeCompletionBinding). + /// + /// Only in /AddIns/DefaultTextEditor/CodeCompletion + /// + /// The ICodeCompletionBinding class specified with the 'class' attribute, or a + /// wrapper that lazy-loads the actual class when it is used in a file with the specified + /// extension. + /// public class CodeCompletionBindingDoozer : IDoozer { public bool HandleConditions { diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ClassDoozer.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ClassDoozer.cs index 0b5fda872a..657f515896 100644 --- a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ClassDoozer.cs +++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ClassDoozer.cs @@ -17,6 +17,7 @@ namespace ICSharpCode.Core /// /// The fully qualified type name of the attribute to create. /// + /// Everywhere where objects are expected. /// /// Any kind of object. /// diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/FileFilterDoozer.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/FileFilterDoozer.cs index e8e6590645..5a07ab4582 100644 --- a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/FileFilterDoozer.cs +++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/FileFilterDoozer.cs @@ -19,6 +19,7 @@ namespace ICSharpCode.Core /// /// The extensions associated with this file filter entry. /// + /// Only in /SharpDevelop/Workbench/FileFilter /// /// String in the format "name|extensions". /// diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/Icon/IconDoozer.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/Icon/IconDoozer.cs index ba85ec4fb8..1807f901e2 100644 --- a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/Icon/IconDoozer.cs +++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/Icon/IconDoozer.cs @@ -28,6 +28,7 @@ namespace ICSharpCode.Core /// This attribute is specified when a file icon association should be created. /// It specifies the semicolon-separated list of file types that use the icon. /// + /// Only in /Workspace/Icons /// /// An IconDescriptor object that exposes the attributes. /// diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/IncludeDoozer.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/IncludeDoozer.cs index b4636ca72d..f1aa9932b2 100644 --- a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/IncludeDoozer.cs +++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/IncludeDoozer.cs @@ -23,6 +23,7 @@ namespace ICSharpCode.Core /// path addin tree location specified by this attribute and returns an /// which includes all items in the output list. /// + /// Everywhere /// /// Any object, depending on the included codon(s). /// diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/MenuItemDoozer.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/MenuItemDoozer.cs index 1179bf7bd5..04488a4041 100644 --- a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/MenuItemDoozer.cs +++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/MenuItemDoozer.cs @@ -33,6 +33,10 @@ namespace ICSharpCode.Core /// /// Command class that is run when item is clicked. /// + /// + /// If "type" is "Menu", the item can have sub-menuitems. + /// + /// Any menu strip paths or context menu paths, e.g. /SharpDevelop/Workbench/MainMenu /// /// A ToolStrip* object, depending on the type attribute. /// diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/ToolBarItemDoozer.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/ToolBarItemDoozer.cs index 2acc0d449f..bce21479ac 100644 --- a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/ToolBarItemDoozer.cs +++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/ToolBarItemDoozer.cs @@ -32,6 +32,7 @@ namespace ICSharpCode.Core /// Command class that is run when item is clicked; or class that manages /// the ComboBox/DropDownButton. /// + /// Any toolbar strip paths, e.g. /SharpDevelop/Workbench/ToolBar /// /// A ToolStrip* object, depending on the type attribute. /// diff --git a/src/Tools/BuildAddinDocumentation/BuildAddinDocumentation.csproj b/src/Tools/BuildAddinDocumentation/BuildAddinDocumentation.csproj new file mode 100644 index 0000000000..65582bc743 --- /dev/null +++ b/src/Tools/BuildAddinDocumentation/BuildAddinDocumentation.csproj @@ -0,0 +1,34 @@ + + + Exe + BuildAddinDocumentation + BuildAddinDocumentation + Debug + AnyCPU + {211887B2-E9E4-45A4-BE16-6CEA4A7E00F2} + + + bin\Debug\ + False + DEBUG;TRACE + True + Full + True + + + bin\Release\ + True + TRACE + False + None + False + + + + + + + + + + \ No newline at end of file diff --git a/src/Tools/BuildAddinDocumentation/BuildAddinDocumentation.sln b/src/Tools/BuildAddinDocumentation/BuildAddinDocumentation.sln new file mode 100644 index 0000000000..475a255aea --- /dev/null +++ b/src/Tools/BuildAddinDocumentation/BuildAddinDocumentation.sln @@ -0,0 +1,6 @@ +Microsoft Visual Studio Solution File, Format Version 9.00 +# SharpDevelop 2.0.0.589 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BuildAddinDocumentation", "BuildAddinDocumentation.csproj", "{211887B2-E9E4-45A4-BE16-6CEA4A7E00F2}" +EndProject +Global +EndGlobal diff --git a/src/Tools/BuildAddinDocumentation/MainClass.cs b/src/Tools/BuildAddinDocumentation/MainClass.cs new file mode 100644 index 0000000000..d24a593b71 --- /dev/null +++ b/src/Tools/BuildAddinDocumentation/MainClass.cs @@ -0,0 +1,186 @@ +/* + * Created by SharpDevelop. + * User: Daniel Grunwald + * Date: 17.10.2005 + * Time: 14:50 + */ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Xml; + +namespace BuildAddinDocumentation +{ + public class MainClass + { + static FileVersionInfo sdVersion; + + public static void Main() + { + string srcDir = @"..\..\..\..\"; + Debug.WriteLine(Path.GetFullPath(srcDir)); + List doozers = new List(); + List conditions = new List(); + + if (!ReadXmlDocu(srcDir + "Main\\Core\\Project", doozers, conditions)) + return; + if (!ReadXmlDocu(srcDir + "Main\\Base\\Project", doozers, conditions)) + return; + + // build normal SharpDevelop: + ProcessStartInfo info = new ProcessStartInfo("cmd", "/c debugbuild.bat"); + info.WorkingDirectory = srcDir; + Process p = Process.Start(info); + if (!p.WaitForExit(60000)) { + Debug.WriteLine("msbuild did not exit"); + return; + } + if (p.ExitCode != 0) { + Debug.WriteLine("msbuild exit code: " + p.ExitCode); + return; + } + + sdVersion = FileVersionInfo.GetVersionInfo(Path.GetFullPath(Path.Combine(srcDir, "..\\bin\\SharpDevelop.exe"))); + + Comparison comparison = delegate(XmlElement a, XmlElement b) { + string shortNameA = a.GetAttribute("name").Substring(a.GetAttribute("name").LastIndexOf('.') + 1); + string shortNameB = b.GetAttribute("name").Substring(b.GetAttribute("name").LastIndexOf('.') + 1); + return shortNameA.CompareTo(shortNameB); + }; + doozers.Sort(comparison); + conditions.Sort(comparison); + + using (StreamWriter html = new StreamWriter(Path.Combine(srcDir, "..\\doc\\technotes\\DoozerList.html"))) { + WriteHeader(html, "Doozer List"); + WriteList(html, doozers, true); + WriteFooter(html); + } + using (StreamWriter html = new StreamWriter(Path.Combine(srcDir, "..\\doc\\technotes\\ConditionList.html"))) { + WriteHeader(html, "Condition List"); + WriteList(html, conditions, false); + WriteFooter(html); + } + } + + static void WriteList(StreamWriter html, List elementList, bool isDoozer) + { + html.WriteLine("
    "); + foreach (XmlElement e in elementList) { + string fullname = e.GetAttribute("name").Substring(2); + string shortName = fullname.Substring(fullname.LastIndexOf('.') + 1); + if (shortName == "LazyLoadDoozer" || shortName == "LazyConditionEvaluator") continue; + if (isDoozer) + shortName = shortName.Substring(0, shortName.Length - "doozer".Length); + else + shortName = shortName.Substring(0, shortName.Length - "conditionEvaluator".Length); + if (shortName == "I") continue; // skip the interface + + html.WriteLine("
  • " + shortName + ""); + } + html.WriteLine("
"); + foreach (XmlElement e in elementList) { + string fullname = e.GetAttribute("name").Substring(2); + string shortName = fullname.Substring(fullname.LastIndexOf('.') + 1); + if (shortName == "LazyLoadDoozer" || shortName == "LazyConditionEvaluator") continue; + if (isDoozer) + shortName = shortName.Substring(0, shortName.Length - "doozer".Length); + else + shortName = shortName.Substring(0, shortName.Length - "conditionEvaluator".Length); + if (shortName == "I") continue; // skip the interface + + html.WriteLine("
"); + html.WriteLine("

" + shortName + "

"); + html.WriteLine("

" + e["summary"].InnerXml + "

"); + html.WriteLine(" "); + html.WriteLine(" "); + if (isDoozer) + html.WriteLine(" "); + html.WriteLine(" "); + html.WriteLine(" "); + bool firstNonAttribute = true; + foreach (XmlElement sub in e) { + switch (sub.Name) { + case "summary": + break; + case "attribute": + html.WriteLine(" "); + html.WriteLine(" "); + html.WriteLine(" "); + break; + default: + if (firstNonAttribute) { + firstNonAttribute = false; + html.WriteLine(" "); + } + html.WriteLine(" "); + html.WriteLine(" "); + html.WriteLine(" "); + break; + } + } + html.WriteLine("
Doozer name:"); + else + html.WriteLine(" Condition name:"); + html.WriteLine(" " + fullname + "

Attributes:

" + sub.GetAttribute("name") + ":"); + html.WriteLine(" " + sub.InnerXml + "

" + char.ToUpper(sub.Name[0]) + sub.Name.Substring(1) + ":"); + html.WriteLine(" " + sub.InnerXml + "
"); + html.WriteLine("
"); + } + } + + static void WriteHeader(StreamWriter html, string title) + { + html.WriteLine(""); + html.WriteLine(" " + title + ""); + html.WriteLine(" "); + html.WriteLine(" "); + html.WriteLine(""); + html.WriteLine("

" + title + "

"); + html.WriteLine("

This file was generated by the tool 'BuildAddinDocumentation'."); + html.WriteLine("It is based on SharpDevelop " + sdVersion.FileMajorPart + "." + sdVersion.FileMinorPart + + "." + sdVersion.FileBuildPart + "." + sdVersion.FilePrivatePart + ".

"); + } + + static void WriteFooter(StreamWriter html) + { + html.WriteLine(""); + } + + static bool ReadXmlDocu(string projectFolder, List doozers, List conditions) + { + XmlDocument doc = GetXmlDocu(projectFolder); + if (doc == null) return false; + foreach (XmlElement member in doc.DocumentElement["members"]) { + if (member.GetAttribute("name").EndsWith("Doozer")) + doozers.Add(member); + if (member.GetAttribute("name").EndsWith("ConditionEvaluator")) + conditions.Add(member); + } + return true; + } + + static XmlDocument GetXmlDocu(string projectFolder) + { + string docFile = Path.GetFullPath("doc.xml"); + if (File.Exists(docFile)) + File.Delete(docFile); + string args = "\"/p:DocumentationFile=" + docFile + "\" \"/p:NoWarn=1591 1573 1574 1572 419\""; + string msbuild = Path.Combine(Path.GetDirectoryName(typeof(object).Assembly.Location), "msbuild.exe"); + ProcessStartInfo info = new ProcessStartInfo(msbuild, args); + info.WorkingDirectory = projectFolder; + Process p = Process.Start(info); + if (!p.WaitForExit(60000)) { + Debug.WriteLine("msbuild did not exit"); + return null; + } + if (p.ExitCode != 0) { + Debug.WriteLine("msbuild exit code: " + p.ExitCode); + return null; + } + XmlDocument doc = new XmlDocument(); + doc.Load(docFile); + return doc; + } + } +}