]> git.sesse.net Git - vlc/commitdiff
python-ctypes: accomodate new event type definitions (cf 96a96f60bb0d1f2506e68b356897...
authorOlivier Aubert <olivier.aubert@liris.cnrs.fr>
Tue, 1 Sep 2009 17:06:41 +0000 (19:06 +0200)
committerOlivier Aubert <olivier.aubert@liris.cnrs.fr>
Tue, 1 Sep 2009 17:06:41 +0000 (19:06 +0200)
Code still works for both old and new versions of includes.

bindings/python-ctypes/generate.py

index 56a758b120d2fab2b598f0f3605510d4afcadafb..355536f4599973fda361648f0d92fd7842624ec3 100755 (executable)
@@ -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()