> It would be smart to add following things: > - '[MonoTODO]' in front of the properties/methods/events > - public events > - a summary node for the class > - maybe a possibility to create the property/method/event without [MonoTODO] > and notimplementedexception (so it is ready for implementation). > > Looking forward to try it out. > > Best, > Jaak
Thanks Jaak, Those were very good suggestions. I believe that I have
addressed them for the most part (still working on the summary part). I
just wrote the script and I think that it works well. I'm attaching it
so that people can try it (and suggest changes). I hope that nobody
minds the attachment.
Here is a sample input file (in the directory System.Windows.Forms):
/* * * * * * * * * * * Begin Text File * * * * * * * * */
Daniel Carrera ([EMAIL PROTECTED])
public class Form : ContainerControl
/// <summary>
/// This is a summary.
/// </summary>
//
// --- Public Properties
//
=public
IButtonControl AcceptButton{gs}
static Form ActiveForm{g}
Form ActiveMdiChild{g}
=public bool
AutoScale{gs}
IsMidiChild{gs}
IsMidiContainer{gs}
KeyPreview{gs}
MaximizeBox{gs}
Modal{g}
//
// --- Public Methods
//
void Activate()
//
// --- Public Events
//
event EventHandler Activated
/* * * * * * * * * * * End Text File * * * * * * * * * * * */
A few notes:
1) The script respects blank lines and C# comments.
2) '=some text' makes 'some text' precede every declaration until the next
'='. To stop this type a line with just an = sign and nothing else.
3) '{gs}' will be replaced by the 'get' and 'set' lines (see below).
The script simply looks for the letters 'g' and 's' inside the
brackets. Therefore, '{gs}', '{get; set}', '{GET}' will all work.
4) You can write multi-line code like-so:
override IntPtr HookProc( \
IntPtr hWnd, \
int msg, \
IntPtr wparam, \
IntPtr lparam \
)
My script will concatenate the extra white space.
To produce the output type:
./autogen.pl Form.template
This will make a file called 'Form.cs', as well as send the output to
STDOUT. The filename is taken from the class name you give it.
As suggested, the output contains the '[MonoTODO]' lines as well. Also,
as suggested, you can suppress those, as well as the
NotImplementedException with:
./autogen.pl --noTODO Form.template
Finally, this markup also addresses the 'public events' suggestion since
there is no distinction for methods, properties, etc.
Here is the output of the program:
//
// tmp.Form
//
// Author:
// stubbed out by Daniel Carrera ([EMAIL PROTECTED])
//
// (C) 2002 Ximian, Inc
//
namespace tmp
{
public public class Form : ContainerControl
{
/// <summary>
/// This is a summary.
/// </summary>
//
// --- Public Properties
//
[MonoTODO]
public IButtonControl AcceptButton
{
get { throw new NotImplementedException (); }
set { throw new NotImplementedException (); }
}
[MonoTODO]
public static Form ActiveForm
{
get { throw new NotImplementedException (); }
}
[MonoTODO]
public Form ActiveMdiChild
{
get { throw new NotImplementedException (); }
}
[MonoTODO]
public bool AutoScale
{
get { throw new NotImplementedException (); }
set { throw new NotImplementedException (); }
}
[MonoTODO]
public bool IsMidiChild
{
get { throw new NotImplementedException (); }
set { throw new NotImplementedException (); }
}
[MonoTODO]
public bool IsMidiContainer
{
get { throw new NotImplementedException (); }
set { throw new NotImplementedException (); }
}
[MonoTODO]
public bool KeyPreview
{
get { throw new NotImplementedException (); }
set { throw new NotImplementedException (); }
}
[MonoTODO]
public bool MaximizeBox
{
get { throw new NotImplementedException (); }
set { throw new NotImplementedException (); }
}
[MonoTODO]
public bool Modal
{
get { throw new NotImplementedException (); }
}
//
// --- Public Methods
//
[MonoTODO]
public bool void Activate()
{
throw new NotImplementedException ();
}
//
// --- Public Events
//
[MonoTODO]
public bool event EventHandler Activated
{
throw new NotImplementedException ();
}
}
}
Cheers,
Daniel.
On Thu, 18 Apr 2002, Jaak Simm wrote:
> I like the idea.
> It would be smart to add following things:
> - '[MonoTODO]' in front of the properties/methods/events
> - public events
> - a summary node for the class
> - maybe a possibility to create the property/method/event without [MonoTODO]
> and notimplementedexception (so it is ready for implementation).
>
> Looking forward to try it out.
>
> Best,
> Jaak
>
> Daniel Carrera wrote:
>
> > I will certainly comply with whatever rules Mono sets.
> >
> > I have another idea. Not as useful as the first, but I'm sure it's
> > legal:
> >
> > I can come up with some sort of "markup" that people can type the classes
> > into. It'd be designed to minimize typing. Then my program would convert
> > that markup to the actual stubbs.
> >
> > I might need help desgning an efficient markup.
> > The markup file (in the System.Windows.Forms directory) might be
> > something like this:
> >
> > Daniel Carrera ([EMAIL PROTECTED])
> > abstract class FileDialog : CommonDialog
> >
> > public prop [
> > bool AddExtension {get set}
> > virtual bool CheckFileExists {g s}
> > ]
> >
> > protected methods [
> > void Dispose()
> > virtual object GetService(Type service)
> > ]
> >
> > >From this my script would generate:
> >
> > //
> > // System.Windows.Forms.FileDialog
> > //
> > // Author:
> > // stubbed out by Daniel Carrera ([EMAIL PROTECTED])
> > //
> > // (C) 2002 Ximian, Inc
> > //
> >
> > namespace System.Windows.Forms
> > {
> > /// <summary>
> > /// ToDo note:
> > /// - Nothing is implemented
> > /// </summary>
> > public abstract class FileDialog : CommonDialog
> > {
> >
> > //
> > // --- Public Properties
> > //
> > public bool AddExtension
> > {
> > get { throw new NotImplementedException (); }
> > set { throw new NotImplementedException (); }
> > }
> > public virtual bool CheckFileExists
> > {
> > get { throw new NotImplementedException (); }
> > set { throw new NotImplementedException (); }
> > }
> >
> > //
> > // --- Protected Methods
> > //
> > protected void Dispose()
> > {
> > throw new NotImplementedException ();
> > }
> > protected virtual object GetService(Type service)
> > {
> > throw new NotImplementedException ();
> > }
> > }
> > }
> >
> > This is much less powerful than the one I made already. However, I
> > thought that if we have to do 3000 classes it might still be worth it.
> >
> > Thoughts on this?
> >
> > Daniel.
> >
> > On 17 Apr 2002, Miguel de Icaza wrote:
> >
> > > Manually typing in the stubs, and bug fixing as we go should be fine.
> > >
> > > Do not attempt to use any automatic mechanisms.
> > >
> > > Miguel.
> > ...
> > >
> > > We have never copy/pasted code. I have always used one machine to read
> > > the prototypes, and another to type it in (logistically, thats the only
> > > way I could do it ;-), which is why you find so many little mistakes in
> > > the base classes ;-)
> > >
> > > Miguel
> > >
> >
> > _______________________________________________
> > Mono-list maillist - [EMAIL PROTECTED]
> > http://lists.ximian.com/mailman/listinfo/mono-list
>
autogen.pl
Description: Create stubbs from markup
