]> git.pld-linux.org Git - packages/subversion.git/blame - subversion-convert-typemaps-to-ifdef.py
-up to 1.7.16
[packages/subversion.git] / subversion-convert-typemaps-to-ifdef.py
CommitLineData
b1635b16 1#!/usr/bin/env python
2
3import sys
4import os
5import re
6import glob
7
8
9lang2LANG = { 'python': 'PYTHON', 'perl5': 'PERL', 'ruby': 'RUBY' }
10
11
12class Queue:
13 type_blank, type_mapbegin, type_mapcont, type_other = range(4)
14
15 def __init__(self, ofp):
16 self.queue = []
17 self.lang_on_queue = None
18 self.ofp = ofp
19
20 def enqueue(self, type, lang, line):
21 if lang is not None:
22 assert type == self.type_mapbegin
23 if self.lang_on_queue != lang:
24 self.flush()
25 self.lang_on_queue = lang
26 if type == self.type_other:
27 self.flush()
28 self.ofp.write(line)
29 else:
30 self.queue.append((type, line))
31
32 def flush(self):
33 while self.queue and self.queue[0][0] == self.type_blank:
34 self.ofp.write(self.queue.pop(0)[1])
35 if not self.queue:
36 return
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 = []
41 for i in self.queue:
42 if i[0] == self.type_blank:
43 local_blank_queue.append(i[1])
44 else:
45 for j in local_blank_queue:
46 self.ofp.write(j)
47 del local_blank_queue[:]
48 self.ofp.write(i[1])
49 del self.queue[:]
50 self.ofp.write('#endif\n')
51 for j in local_blank_queue:
52 self.ofp.write(j)
53 self.lang_on_queue = None
54
55
56def process_file(fname):
57 old_fname = fname + '.old'
58 os.rename(fname, old_fname)
59 ifp = open(old_fname, 'r')
60 ifpiter = iter(ifp)
61 ofp = open(fname, 'w')
62 q = Queue(ofp)
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.*;)$')
66 try:
67 for i in ifpiter:
68 if re_blank.match(i):
69 q.enqueue(q.type_blank, None, i)
70 continue
71 m = re_mapbegin.match(i)
72 if m:
73 q.enqueue(q.type_mapbegin, m.group(1), '%typemap('+m.group(2))
74 bracketlevel = 0
75 any_brackets = False
76 while 1:
77 bracketlevel += i.count('{')
78 if bracketlevel:
79 any_brackets = True
80 bracketlevel -= i.count('}')
81 if not bracketlevel and (any_brackets or i.endswith(';\n')):
82 break
83 i = ifpiter.next()
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)
89 continue
90 q.enqueue(q.type_other, None, i)
91 except StopIteration:
92 sys.stderr.write('In %r, hit EOF inside typemap!?\n' % fname)
93 ofp.write('##### EOF HIT WITH TYPEMAP OPEN FROM HERE #####\n')
94 q.flush()
95 ifp.close()
96 ofp.close()
97
98
99def main():
100 action_files = glob.glob('*.i') + glob.glob('include/*.swg')
101 for file in action_files:
102 process_file(file)
103
104
105if __name__ == '__main__':
106 main()
This page took 0.06859 seconds and 4 git commands to generate.