]> git.cworth.org Git - apitrace/blobdiff - specs/scripts/gltxt.py
common: rename trace_backtrace.* -> os_backtrace.*
[apitrace] / specs / scripts / gltxt.py
index 4ce92320114b1d52ba101739310a78baf7837b40..be95d80bcbb3f310c263722cede8dfac1f2cd26f 100755 (executable)
@@ -97,6 +97,9 @@ class TxtParser(LineParser):
     property_re = re.compile(r'^\w+:')
     prototype_re = re.compile(r'^(\w+)\((.*)\)$')
 
+    comment_start_re = re.compile(r'^/\*')
+    comment_end_re = re.compile(r'.*\*/$')
+
     def __init__(self, stream, prefix=''):
         LineParser.__init__(self, stream)
         self.prefix = prefix
@@ -131,16 +134,32 @@ class TxtParser(LineParser):
                 break
             self.consume()
             name = line.strip()
+            if name.startswith('EGL_'):
+                self.prefix = ''
             print '    # %s' % name
 
+    def skip_c_comments(self):
+        while not self.eof():
+            line = self.lookahead().strip()
+            mo = self.comment_start_re.match(line)
+            if not mo:
+                return
+            while not self.eof():
+                self.consume()
+                mo = self.comment_end_re.match(line)
+                if mo:
+                    return
+                line = self.lookahead().strip()
+
     def parse_procs(self):
         lines = []
         while not self.eof():
+            self.skip_c_comments()
             line = self.lookahead()
             if not line.strip():
                 self.consume()
                 continue
-            if not line.startswith(' '):
+            if not line[0].isspace():
                 break
             self.consume()
             lines.append(line.strip())
@@ -177,7 +196,15 @@ class TxtParser(LineParser):
 
     def parse_arg(self):
         type = self.parse_type()
+        if self.tokens[0] == ')':
+            assert type == 'Void'
+            return ''
         name = self.tokens.pop(0)
+        if self.tokens[0] == '[':
+            self.tokens.pop(0)
+            n = int(self.tokens.pop(0))
+            assert self.tokens.pop(0) == ']'
+            type = 'Array(%s, %d)' % (type, n)
         return '(%s, "%s")' % (type, name)
 
     def parse_type(self):
@@ -187,7 +214,7 @@ class TxtParser(LineParser):
         if token == 'void':
             type = 'Void'
         else:
-            type = 'GL' + token
+            type = self.prefix.upper() + token
         while self.tokens[0] == '*':
             type = 'OpaquePointer(%s)' % type
             self.tokens.pop(0)
@@ -196,7 +223,7 @@ class TxtParser(LineParser):
 
 def main():
     optparser = optparse.OptionParser(
-        usage="\n\t%prog [options] [SPEC] ")
+        usage="\n\t%prog [options] [URL|TXT] ...")
     optparser.add_option(
         '-p', '--prefix', metavar='STRING',
         type="string", dest="prefix", default='gl',