3 # convert-ly.py -- Update old LilyPond input files (fix name?)
5 # source file of the GNU LilyPond music typesetter
7 # (c) 1998--2005 Han-Wen Nienhuys <hanwen@cs.uu.nl>
8 # Jan Nieuwenhuizen <janneke@gnu.org>
10 # converting rules are found in python/convertrules.py
19 datadir = '@local_lilypond_datadir@'
20 if not os.path.isdir (datadir):
21 datadir = '@lilypond_datadir@'
22 if os.environ.has_key ('LILYPONDPREFIX'):
23 datadir = os.environ['LILYPONDPREFIX']
24 while datadir[-1] == os.sep:
27 sys.path.insert (0, os.path.join (datadir, 'python'))
34 from convertrules import *
38 '''Update LilyPond input to newer version. By default, update from the
39 version taken from the \\version command, to the current LilyPond version.
44 convert-ly --from=2.3.28 --to 2.5.21 foobar.ly
47 copyright = ('Jan Nieuwenhuizen <janneke@gnu.org>',
48 'Han-Wen Nienhuys <hanwen@cs.uu.nl>')
50 option_definitions = [
51 ('', 'e', 'edit',_('edit in place')),
52 (_('VERSION'), 'f', 'from',
53 _('start from VERSION [default: \\version found in file]')),
54 ('', 'h', 'help',_('print this help')),
55 ('', 'n', 'no-version',_ ('do not add \\version command if missing')),
56 ('','s', 'show-rules', _('print rules [default: --from=0, --to=@TOPLEVEL_VERSION@]')),
57 (_('VERSION'), 't', 'to',_('convert to VERSION [default: @TOPLEVEL_VERSION@]')),
58 ('','v','version',_('print program version"'))
61 program_name = os.path.basename (sys.argv[0])
62 program_version = '@TOPLEVEL_VERSION@'
67 def guess_lilypond_version (filename):
68 s = open (filename).read ()
69 m = lilypond_version_re.search (s)
75 class FatalConversionError:
83 def do_one_file (infile_name):
84 sys.stderr.write (_ ("Processing `%s\'... ") % infile_name)
85 sys.stderr.write ('\n')
88 outfile_name = infile_name + '.NEW'
89 elif __main__.outfile_name:
90 outfile_name = __main__.outfile_name
92 if __main__.from_version:
93 from_version = __main__.from_version
95 guess = guess_lilypond_version (infile_name)
97 raise UnknownVersion ()
98 from_version = str_to_tuple (guess)
100 if __main__.to_version:
101 to_version = __main__.to_version
103 to_version = latest_version ()
107 infile = open (infile_name, 'r')
112 (last, result) = do_conversion (infile.read (), from_version, to_version)
117 newversion = r'\version "%s"' % tup_to_str (last)
118 if lilypond_version_re.search (result):
119 result = re.sub (lilypond_version_re_str,
120 '\\' + newversion, result)
122 result = newversion + '\n' + result
124 error_file.write ('\n')
128 os.remove(infile_name + '~')
131 os.rename (infile_name, infile_name + '~')
132 outfile = open (infile_name, 'w')
137 outfile.write (result)
148 global from_version, to_version, edit, show_rules_p, add_version
150 (sh, long) = ly.getopt_args (option_definitions)
152 (options, files) = getopt.getopt (sys.argv[1:], sh, long)
153 except getopt.error, s:
154 sys.stderr.write ('\n')
155 ly.error (_ ("getopt says: `%s'" % s))
156 sys.stderr.write ('\n')
164 if o == '--help' or o == '-h':
167 elif o == '--version' or o == '-v':
168 ly.identify (sys.stdout)
170 elif o== '--from' or o=='-f':
171 from_version = str_to_tuple (a)
172 elif o== '--to' or o=='-t':
173 to_version = str_to_tuple (a)
174 elif o== '--edit' or o == '-e':
176 elif o== '--show-rules' or o == '-s':
178 elif o == '--no-version' or o == '-n':
188 files = do_options ()
190 # should parse files[] to read \version?
192 show_rules (sys.stdout, from_version, to_version)
195 ly.identify (sys.stderr)
204 elif not os.path.isfile (f):
205 ly.error (_ ("can't open file: `%s'") % f)
211 except UnknownVersion:
212 ly.error (_ ("can't determine version for `%s'. Skipping") % f)
214 sys.stderr.write ('\n')