/usr/share/pygobject/2.0/codegen/scanvirtuals.py is in python-gobject-2-dev 2.28.6-12build1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | #! /usr/bin/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()
|