4 # lily-python.py -- implement general LilyPond-wide python stuff
6 # source file of the GNU LilyPond music typesetter
8 # (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
24 version_re = regex.compile('\\version *\"\(.*\)\"')
25 make_assign_re = regex.compile('^\([A-Z_]*\) *= *\(.*\)$')
27 def version_tuple(file):
28 lines = file.readlines()
34 if make_assign_re.search(l) <> -1:
35 nm = make_assign_re.group(1)
36 val = make_assign_re.group(2)
37 if nm == 'TOPLEVEL_MAJOR_VERSION':
39 elif nm == 'TOPLEVEL_MINOR_VERSION':
41 elif nm == 'TOPLEVEL_PATCH_LEVEL':
43 elif nm == 'TOPLEVEL_MY_PATCH_LEVEL':
47 def next_version(tup):
48 return (tup[0], tup[1], tup[2] + 1, tup[3]);
50 def prev_version(tup):
53 return (tup[0], tup[1], tup[2], '');
55 return (tup[0], tup[1] -1, tup[2], '');
57 return (tup[0], tup[1], tup[2] - 1, '');
61 return 'lilypond-' + version_tuple_to_str(v)
64 return dirname(v) + '.tar.gz'
66 def released_tarball(v):
67 return lilydirs.release_dir + tarball(v)
70 def tuple_to_list(tup):
76 def version_str_to_tuple(str):
83 return (atoi(t[0]), atoi(t[1]), atoi(t[2]), mypatch)
87 def guess_mudela_version(filename):
92 if version_re.search(l) <> -1:
93 return version_re.group(1)
97 def version_tuple_to_str(tup):
100 mypatch = '.' + tup[3]
102 return ('%d.%d.%d' % tup[0:3]) + mypatch
107 self.topdir = os.environ['LILYPOND_SOURCEDIR'] + '/'
109 self.topdir = os.environ['HOME'] + 'musix/current'
111 self.release_dir = self.topdir + '../releases/'
112 self.patch_dir = self.topdir + '../patches/'
114 def version_tuple(self):
115 f = open (self.topdir + 'VERSION')
122 lilydirs = Lilydirs()
124 if __name__ == '__main__':
125 v= lilydirs.version_tuple()
126 print v, prev_version(v), next_version(v)
127 mv = guess_mudela_version(lilydirs.topdir + 'init/symbol.ly')
129 print version_tuple_to_str(pv), prev_version(pv), next_version(pv)
130 print version_tuple_to_str((0,1,1,''))
131 print mv, version_str_to_tuple(mv)
148 header_regex = regex.compile('\\header[ \t\n]*{\([^}]*\)}')
149 header_entry_regex = regex.compile('[\n\t ]*\([^\n\t ]+\)[\n\t ]*=[\n \t]*\([^;]+\)[\n \t]*;')
152 # FIXME breaks on multiple strings.
154 def read_mudela_header (fn):
156 s = regsub.gsub('%.*$', '', s)
157 s = regsub.gsub('\n', ' ', s)
160 if header_regex.search(s) <> -1:
161 h = header_regex.group(1)
165 while regex.search('=', h) <> -1:
167 if header_entry_regex.search (h) == -1:
171 h = regsub.sub(header_entry_regex, '', h)
172 left = header_entry_regex.group(1)
173 right = header_entry_regex.group(2)
175 right = regsub.gsub('\([^\\]\)\"', '\\1', right)
176 right = regsub.gsub('^"', '', right)
177 left = regsub.gsub('\([^\\]\)\"', '', left)
178 left = regsub.gsub('^"', '', left)