summaryrefslogtreecommitdiffstats
path: root/codegen/scanvirtuals.py
diff options
context:
space:
mode:
authorJohan Dahlin <johan@gnome.org>2008-01-19 12:49:29 +0000
committerJohan Dahlin <johan@src.gnome.org>2008-01-19 12:49:29 +0000
commit9c43da820eb2bd872e58ad12d65ed6c89d556893 (patch)
treee4f897f87a5cc9585495b7e41170bf770ebb56a2 /codegen/scanvirtuals.py
parent23df5efb74f6b9b6c5da7a8db89ccd612533327d (diff)
downloadpygobject-9c43da820eb2bd872e58ad12d65ed6c89d556893.tar.gz
pygobject-9c43da820eb2bd872e58ad12d65ed6c89d556893.tar.xz
pygobject-9c43da820eb2bd872e58ad12d65ed6c89d556893.zip
Import codegen from pygtk. Add initial gio and gio.unix bindings.
2008-01-19 Johan Dahlin <johan@gnome.org> * Makefile.am: * codegen/Makefile.am: * codegen/README.defs: * codegen/__init__.py: * codegen/argtypes.py: * codegen/code-coverage.py: * codegen/codegen.py: * codegen/createdefs.py: * codegen/definitions.py: * codegen/defsconvert.py: * codegen/defsgen.py: * codegen/defsparser.py: * codegen/docextract.py: * codegen/docextract_to_xml.py: * codegen/docgen.py: * codegen/h2def.py: * codegen/mergedefs.py: * codegen/missingdefs.py: * codegen/mkskel.py: * codegen/override.py: * codegen/pygtk-codegen-2.0.in: * codegen/reversewrapper.py: * codegen/scanvirtuals.py: * codegen/scmexpr.py: * configure.ac: * gio/Makefile.am: * gio/__init__.py: * gio/gio-types.defs: * gio/gio.defs: * gio/gio.override: * gio/giomodule.c: (init_gio): * gio/unix-types.defs: * gio/unix.defs: * gio/unix.override: * gio/unixmodule.c: (initunix): Import codegen from pygtk. Add initial gio and gio.unix bindings. svn path=/trunk/; revision=730
Diffstat (limited to 'codegen/scanvirtuals.py')
-rwxr-xr-xcodegen/scanvirtuals.py54
1 files changed, 54 insertions, 0 deletions
diff --git a/codegen/scanvirtuals.py b/codegen/scanvirtuals.py
new file mode 100755
index 0000000..c108737
--- /dev/null
+++ b/codegen/scanvirtuals.py
@@ -0,0 +1,54 @@
+#!/usr/bin/env python
+import re
+import sys
+
+
+def main():
+ rx = re.compile(r'^\s*([\w\s\*]+)\(\s*\*\s*(\w+)\s*\)\s*\(([^()]*)\);',
+ re.DOTALL|re.MULTILINE)
+ for f in sys.argv[1:]:
+ #print ";; From", f
+ buf = file(f).read()
+ for m in rx.findall(buf):
+ return_type = m[0].strip()
+ if 'typedef' in return_type:
+ continue
+ if return_type == 'void':
+ return_type = 'none'
+ return_type = return_type.replace(' ', '')
+ virtual_name = m[1]
+ if 'reserved' in virtual_name:
+ continue
+ params = []
+ if not m[2]:
+ print >> sys.stderr, repr(m)
+ continue
+ for param in map(str.strip, m[2].split(',')):
+ if '*' in param:
+ tokens = param.split('*')
+ ptype = tokens[0].strip() + '*'*(len(tokens) - 1)
+ pname = tokens[-1].strip()
+ else:
+ if param == 'void':
+ continue
+ ptype, pname = map(str.strip, param.split())
+ ptype = ptype.replace('const ', 'const-')
+ while '[]' in pname:
+ pname = pname.replace('[]', '')
+ ptype += '[]'
+ params.append((ptype, pname))
+ if not params:
+ continue
+ objname = params[0][0].replace('*', '')
+ print '(define-virtual', virtual_name
+ print ' (of-object "%s")' % objname
+ print ' (return-type "%s")' % return_type
+ if len(params) > 1:
+ print ' (parameters'
+ for param in params[1:]:
+ print ' \'("%s" "%s")' % param
+ print ' )'
+ print ')'
+
+if __name__ == '__main__':
+ main()