From: Olivier Aubert Date: Tue, 1 Sep 2009 17:06:41 +0000 (+0200) Subject: python-ctypes: accomodate new event type definitions (cf 96a96f60bb0d1f2506e68b356897... X-Git-Tag: 1.1.0-ff~3635 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=bd9f861ce6d311b617e6ea86dbb4aabba291e5ae;p=vlc python-ctypes: accomodate new event type definitions (cf 96a96f60bb0d1f2506e68b356897ceca6f6b586d) Code still works for both old and new versions of includes. --- diff --git a/bindings/python-ctypes/generate.py b/bindings/python-ctypes/generate.py index 56a758b120..355536f459 100755 --- a/bindings/python-ctypes/generate.py +++ b/bindings/python-ctypes/generate.py @@ -88,6 +88,7 @@ python_param_re=re.compile('(@param\s+\S+)(.+)') forward_re=re.compile('.+\(\s*(.+?)\s*\)(\s*\S+)') enum_re=re.compile('typedef\s+(enum)\s*(\S+\s*)?\{\s*(.+)\s*\}\s*(\S+);') special_enum_re=re.compile('^(enum)\s*(\S+\s*)?\{\s*(.+)\s*\};') +event_def_re=re.compile('^DEF\(\s*(\w+)\s*\)') # Definition of parameter passing mode for types. This should not be # hardcoded this way, but works alright ATM. @@ -139,6 +140,8 @@ class Parser(object): with type == 'enum' (for the moment) and value_list being a list of (name, value) Note that values are string, since this is intended for code generation. """ + event_names=[] + f=open(name, 'r') accumulator='' for l in f: @@ -185,21 +188,35 @@ class Parser(object): comment='' continue + # Special case, used only for libvlc_events.h + # (version after 96a96f60bb0d1f2506e68b356897ceca6f6b586d) + m=event_def_re.match(l) + if m: + # Event definition. + event_names.append('libvlc_'+m.group(1)) + continue + # Special case, used only for libvlc_events.h m=special_enum_re.match(l) if m: - values=[] (typ, name, data)=m.groups() - for i, l in enumerate(paramlist_re.split(data)): - l=l.strip() - if l.startswith('/*') or l.startswith('#'): - continue - if '=' in l: - # A value was specified. Use it. - values.append(re.split('\s*=\s*', l)) - else: - if l: - values.append( (l, str(i)) ) + if event_names: + # event_names were defined through DEF macro + # (see 96a96f60bb0d1f2506e68b356897ceca6f6b586d) + values=list( (n, str(i)) for i, n in enumerate(event_names)) + else: + # Before 96a96f60bb0d1f2506e68b356897ceca6f6b586d + values=[] + for i, l in enumerate(paramlist_re.split(data)): + l=l.strip() + if l.startswith('/*') or l.startswith('#'): + continue + if '=' in l: + # A value was specified. Use it. + values.append(re.split('\s*=\s*', l)) + else: + if l: + values.append( (l, str(i)) ) comment=comment.replace('@{', '').replace('@see', 'See').replace('\ingroup', '') yield (typ, name.strip(), values, comment) comment='' @@ -396,7 +413,7 @@ class PythonGenerator(object): self.output("# Not wrapped methods:") for m in not_wrapped: self.output("# ", m) - + if self.fd != sys.stdout: self.fd.close()