|
|
Rank: Advanced Member Groups: Member
Joined: 4/24/2008 Posts: 6 Points: 18 Location: Scotland
|
Lets you create a Singleton class (one instance, global scope). Really just a mod to the existing Class command but worth while as a learning exercise. Code: <?xml version="1.0"?> <Commands xmlns="http://schemas.devprojects.net/AutoCode/v3.0"> <Command name="SingletonClass" priority="100">
<CommandBehavior> <CommandLine shortcut="singleton" /> <ActiveDocument extensions=".cs"/> </CommandBehavior>
<CommandInfo> <LanguageCategory>CSharp</LanguageCategory> <Category>Code</Category> <Usage> <![CDATA[<prop1Type> <prop1Name> ... <className> singleton]]> </Usage> <Description>Constructs a Singleton Class with multiple properties.</Description> <Author>Derek Smyth</Author> <HelpUrl>http://www.dsmyth.net/wiki</HelpUrl> </CommandInfo>
<CommandCode language="csharp">
<Render> <![CDATA[ RenderClassBegin(Arguments[Arguments.Length-1]); RenderSingletonInstance(Arguments[Arguments.Length-1]);
RenderStartRegion(@"Fields"); for (int n=0; n<Arguments.Length-1; n+=2) { RenderField(Arguments[n], Arguments[n+1]); } RenderEndRegion(); RenderStartRegion(@"Constructors"); RenderConstructors(Arguments); RenderEndRegion(); RenderStartRegion(@"Properties"); for (int n=0; n<Arguments.Length-1; n+=2) { RenderProperty(Arguments[n], Arguments[n+1]); } RenderEndRegion(); RenderStartRegion(@"Methods"); RenderGetSingletonMethod(Arguments[Arguments.Length-1]); RenderEndRegion(); RenderClassEnd(); ]]> </Render>
<Codes> <Code id="ClassBegin"> <![CDATA[public sealed class <%=ToPascalCase(args[0])%> { ]]> </Code>
<Code id="SingletonInstance"> <![CDATA[private static readonly <%=ToPascalCase(args[0])%> singletonInstance = new <%=ToPascalCase(args[0])%>(); ]]> </Code> <Code id="StartRegion"> <![CDATA[ #region <%=args[0]%> ]]> </Code> <Code id="EndRegion"> <![CDATA[ #endregion ]]> </Code> <Code id="Field"> <![CDATA[private <%=args[0]%> <%=ToUnderscore(args[1])%>; ]]> </Code>
<Code id="Constructors"> <![CDATA[private <%=ToPascalCase(args[args.Length-1])%>(/**/) { //initialise singleton variables here } ]]> </Code>
<Code id="Property" codeElement="Selection" codePoint="StartOfSelection"> <![CDATA[public <%=args[0]%> <%=ToPascalCase(args[1])%> { get { return <%=ToUnderscore(args[1])%>; } set { <%=ToUnderscore(args[1])%> = value; } }
]]> </Code>
<Code id="GetSingletonMethod"> <![CDATA[ public static <%=ToPascalCase(args[0])%> Get<%=ToPascalCase(args[0])%>() { return singletonInstance; } ]]> </Code> <Code id="ClassEnd"> <![CDATA[ } ]]> </Code> </Codes>
<SmartFormat> <Start codeElement="ClassBegin" codePoint="StartOfElement" /> <End codeElement="ClassEnd" codePoint="EndOfElement" /> </SmartFormat>
<Selection codeElement="Constructors" codePoint="StartOfElement" clearSelection="true"> <SelectText>/**/</SelectText> </Selection>
</CommandCode> </Command>
</Commands>
|
|
Rank: Administration Groups: Administration
Joined: 3/16/2008 Posts: 22 Points: 72 Location: Spain
|
Thanks Derek,
I wonder if you don’t mind if I publish it in the Catalog section.
Thanks,
Alvaro
|
|
Rank: Advanced Member Groups: Member
Joined: 4/24/2008 Posts: 6 Points: 18 Location: Scotland
|
Alvaro wrote:Thanks Derek,
I wonder if you don’t mind if I publish it in the Catalog section.
Thanks,
Alvaro
Hi Alvaro, Yeah of course on you go. Just take it as granted that any commands I post are for use where ever you want. Here is the VB.NET equivalent. Code: <?xml version="1.0"?> <Commands xmlns="http://schemas.devprojects.net/AutoCode/v3.0"> <Command name="SingletonClass" priority="100">
<CommandBehavior> <CommandLine shortcut="singleton" /> <ActiveDocument extensions=".vb"/> </CommandBehavior>
<CommandInfo> <LanguageCategory>VB.NET</LanguageCategory> <Category>Code</Category> <Usage> <![CDATA[<prop1Type> <prop1Name> ... <className> singleton]]> </Usage> <Description>Constructs a Singleton Class with multiple properties. Only value type properties are supported.</Description> <Author>Derek Smyth</Author> <HelpUrl>http://www.dsmyth.net/wiki</HelpUrl> </CommandInfo>
<CommandCode language="csharp">
<Render> <![CDATA[ RenderClassBegin(Arguments[Arguments.Length-1]); RenderSingletonInstance(Arguments[Arguments.Length-1]);
RenderStartRegion(@"Fields"); for (int n=0; n<Arguments.Length-1; n+=2) { RenderField(Arguments[n], Arguments[n+1]); } RenderEndRegion(); RenderStartRegion(@"Constructors"); RenderConstructors(); RenderEndRegion(); RenderStartRegion(@"Properties"); for (int n=0; n<Arguments.Length-1; n+=2) { RenderProperty(Arguments[n], Arguments[n+1]); } RenderEndRegion(); RenderStartRegion(@"Methods"); RenderGetSingletonMethod(Arguments[Arguments.Length-1]); RenderEndRegion(); RenderClassEnd(); ]]> </Render>
<Codes> <Code id="ClassBegin"> <![CDATA[Public NotInheritable Class <%=ToPascalCase(args[0])%> ]]> </Code>
<Code id="SingletonInstance"> <![CDATA[Private Shared singletonInstance As New <%=ToPascalCase(args[0])%>() ]]> </Code> <Code id="StartRegion"> <![CDATA[ #Region "<%=args[0]%>" ]]> </Code> <Code id="EndRegion"> <![CDATA[ #End Region ]]> </Code> <Code id="Field"> <![CDATA[Dim <%=ToUnderscore(args[1])%> As <%=args[0]%> ]]> </Code>
<Code id="Constructors"> <![CDATA[Private Sub New() 'initialise singleton variables here End Sub ]]> </Code>
<Code id="Property" codeElement="Selection" codePoint="StartOfSelection"> <![CDATA[Public Property <%=ToPascalCase(args[1])%>() As <%=args[0]%> Get Return <%=ToUnderscore(args[1])%> End Get Set(ByVal value As <%=args[0]%>) <%=ToUnderscore(args[1])%> = value End Set End Property ]]> </Code>
<Code id="GetSingletonMethod"> <![CDATA[ Public Shared Function Get<%=ToPascalCase(args[0])%>() As <%=ToPascalCase(args[0])%> return singletonInstance End Function ]]> </Code> <Code id="ClassEnd"> <![CDATA[ End Class ]]> </Code> </Codes>
<SmartFormat> <Start codeElement="ClassBegin" codePoint="StartOfElement" /> <End codeElement="ClassEnd" codePoint="EndOfElement" /> </SmartFormat>
<Selection codeElement="Constructors" codePoint="StartOfElement" clearSelection="true"> <SelectText>/**/</SelectText> </Selection>
</CommandCode> </Command>
</Commands>
|
|
Rank: Administration Groups: Administration
Joined: 3/16/2008 Posts: 22 Points: 72 Location: Spain
|
Thanks Derek, I’m working in the Catalog section to organize all commands, allow people post new commands and make it possible to search inside the catalog and download them. I’ll publish these as soon as I finish with it. By the way, I edited the templates <HelpUrl> tag to show your site http://www.dsmyth.net/wikiThanks again, Alvaro
|
|
|
Guest |