9 lang2LANG = { 'python': 'PYTHON', 'perl5': 'PERL', 'ruby': 'RUBY' }
13 type_blank, type_mapbegin, type_mapcont, type_other = range(4)
15 def __init__(self, ofp):
17 self.lang_on_queue = None
20 def enqueue(self, type, lang, line):
22 assert type == self.type_mapbegin
23 if self.lang_on_queue != lang:
25 self.lang_on_queue = lang
26 if type == self.type_other:
30 self.queue.append((type, line))
33 while self.queue and self.queue[0][0] == self.type_blank:
34 self.ofp.write(self.queue.pop(0)[1])
37 assert (self.queue[0][0] == self.type_mapbegin and
38 self.lang_on_queue is not None)
39 self.ofp.write('#ifdef SWIG%s\n' % lang2LANG[self.lang_on_queue])
40 local_blank_queue = []
42 if i[0] == self.type_blank:
43 local_blank_queue.append(i[1])
45 for j in local_blank_queue:
47 del local_blank_queue[:]
50 self.ofp.write('#endif\n')
51 for j in local_blank_queue:
53 self.lang_on_queue = None
56 def process_file(fname):
57 old_fname = fname + '.old'
58 os.rename(fname, old_fname)
59 ifp = open(old_fname, 'r')
61 ofp = open(fname, 'w')
63 re_blank = re.compile(r'^\s*$')
64 re_mapbegin = re.compile(r'(?s)^%typemap\((python|perl5|ruby), ?(.*$)')
65 re_mapend = re.compile(r'^(?:}\s*|%typemap.*;)$')
69 q.enqueue(q.type_blank, None, i)
71 m = re_mapbegin.match(i)
73 q.enqueue(q.type_mapbegin, m.group(1), '%typemap('+m.group(2))
77 bracketlevel += i.count('{')
80 bracketlevel -= i.count('}')
81 if not bracketlevel and (any_brackets or i.endswith(';\n')):
84 if re_mapbegin.match(i):
85 sys.stderr.write('In %r, saw typemap opener before closing '
86 'previous!?\n' % fname)
87 ofp.write('##### TYPEMAP OPEN FROM HERE NOT CLOSED #####\n')
88 q.enqueue(q.type_mapcont, None, i)
90 q.enqueue(q.type_other, None, i)
92 sys.stderr.write('In %r, hit EOF inside typemap!?\n' % fname)
93 ofp.write('##### EOF HIT WITH TYPEMAP OPEN FROM HERE #####\n')
100 action_files = glob.glob('*.i') + glob.glob('include/*.swg')
101 for file in action_files:
105 if __name__ == '__main__':