74 self.qtTypes = set() |
74 self.qtTypes = set() |
75 self.args = args |
75 self.args = args |
76 |
76 |
77 def collect(self, filename): |
77 def collect(self, filename): |
78 with open(filename) as file: |
78 with open(filename) as file: |
79 for line in file: |
79 for linenumber, line in enumerate(file, 1): |
80 line = line.strip() |
80 try: |
81 if line and not line.startswith('#'): |
81 line = line.strip() |
82 from re import search |
82 if line and not line.startswith('#'): |
83 match = search('^option (\w+) = (.+)$', line) |
83 from re import search |
84 if not match: |
84 match = search('^option (\w+) = (.+)$', line) |
85 raise ValueError('unable to parse: %r' % line) |
85 if not match: |
86 name, value = match.groups() |
86 raise ValueError('unable to parse: %r' % line) |
87 match = search(r'^(\w+)\s*\{(.*)\}$', value) |
87 name, value = match.groups() |
88 try: |
88 match = search(r'^([a-zA-Z0-9_<>]+)\s*\{(.*)\}$', value) |
89 typename, value = match.groups() |
89 try: |
90 if not value: |
90 typename, value = match.groups() |
91 value = typename + ' {}' |
91 if not value: |
92 except: |
92 value = typename + ' {}' |
93 typename = deduce_type(value) |
93 except: |
94 self.declare(name, typename, value) |
94 typename = deduce_type(value) |
|
95 self.declare(name, typename, value) |
|
96 except ValueError as error: |
|
97 from sys import stderr, exit |
|
98 print(str.format( |
|
99 '{file}:{line}: {error}', |
|
100 file = filename, |
|
101 line = linenumber, |
|
102 error = str(error), |
|
103 ), file = stderr) |
|
104 exit(1) |
95 # Sort the declarations in alphabetical order |
105 # Sort the declarations in alphabetical order |
96 self.declarations = OrderedDict(sorted(self.declarations.items(), key = lambda t: t[1]['name'])) |
106 self.declarations = OrderedDict(sorted(self.declarations.items(), key = lambda t: t[1]['name'])) |
97 # Fill in additional information |
107 # Fill in additional information |
98 for declaration in self.declarations.values(): |
108 for declaration in self.declarations.values(): |
99 declaration['readgate'] = caseconversions.convert_case(declaration['name'], style='java') |
109 declaration['readgate'] = caseconversions.convert_case(declaration['name'], style='java') |