lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


The problem of getting Bitmap class or XWindows class may be solved by regexp rules. I don't know wxWindows very much but there may be way to determine if a class should be or not be binded simply from its name ?

David wrote:

Nick Trout wrote:

Possibly, I know wxLua uses ctags to parse wxWindows, then Lua to parse the output and generate a binding. I'd hate to have to maintain the binding to something like wxWindows (its enormous!).

I see ParseTags.lua in the source code, but I'm not convinced that Paul is using it to generate wxLuaWrap.i. If he's using it as a tool, I'm guessing he's adding the prototypes it generates to wxLuaWrap.i by hand.

If you look in wxLuaWrap.i, you'll see stuff like wxPalette::GetPixel, which is stubbed out because the wrappers don't support passing by reference. And there's stuff like wxList::Insert, which is manually renamed to InsertAt because the wrappers don't support polymorphism within the same class.
So this stuff isn't entirely autogenerated.

And there's another reason you can't just run ctags to generate the prototypes, although it's probably fairly unique to wxWindows. wxWindows is cross-platform, so the implementation of similar-looking classes on different platforms is accomplished by implementing subclasses which may not exist on other platforms. For example, consider this (imaginary) scenario:

- The wxDrawable class is implemented in Windows by inheriting from the Bitmap base class. It inherits the ::DrawLine method.

  - The wxDrawable class is implemented in Gtk via the gtk_drawable class.
    ::DrawLine is implemented in the same class.

  - The wxDrawable class is implemented in X11 via inheriting from Pixmap.
    ::DrawLine is implemented in yet another class, XWindowCalls.

If you ran ctags on the Windows source files, you would end up with prototypes for the Bitmap base class, which doesn't exist in the Gtk or X11 versions. If you ran it on the X11 source files, you'd end up including the XWindows class, which doesn't exist on Windows (Gtk is derived from XWindows and probably has it, but we'll ignore that).

So what can be done? You can't just automaticall exclude the base classes that aren't common across platforms, because you wouldn't get a wrapper for ::DrawLine - not using the Windows or X11 source, anyway.

So to get portable wrappers, you have to rely on the documentation, which is supposed to list only the routines that are common across all platforms. In the case of wxWindows, you could write a program to parse the documentation (it's in HTML format) and grabs the prototypes, but you still have to go through it by hand and make corrections. That's because there are still polymorphic name conflicts, routines that rely on passing by reference, and many cases where the documentation is just plain wrong - bad parameters, deprecated classes, etc.

I'm not sure this is indicitive of anything, other than that sometime wrappers are tedious, even with automated tools.

-- David Cuny