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>
16 datadir = '@local_lilypond_datadir@'
17 if not os.path.isdir (datadir):
18 datadir = '@lilypond_datadir@'
19 if os.environ.has_key ('LILYPONDPREFIX'):
20 datadir = os.environ['LILYPONDPREFIX']
21 while datadir[-1] == os.sep:
24 sys.path.insert (0, os.path.join (datadir, 'python'))
31 from convertrules import *
35 '''Update LilyPond input to newer version. By default, update from the
36 version taken from the \\version command, to the current LilyPond version.
41 convert-ly --from=2.3.28 --to 2.5.21 foobar.ly
44 copyright = ('Jan Nieuwenhuizen <janneke@gnu.org>',
45 'Han-Wen Nienhuys <hanwen@cs.uu.nl>')
47 option_definitions = [
48 ('', 'e', 'edit',_('edit in place')),
49 (_('VERSION'), 'f', 'from',
50 _('start from VERSION [default: \\version found in file]')),
51 ('', 'h', 'help',_('print this help')),
52 ('', 'n', 'no-version',_ ('do not add \\version command if missing')),
53 ('','s', 'show-rules', _('print rules [default: --from=0, --to=@TOPLEVEL_VERSION@]')),
54 (_('VERSION'), 't', 'to',_('convert to VERSION [default: @TOPLEVEL_VERSION@]')),
55 ('','v','version',_('print program version"'))
58 program_name = os.path.basename (sys.argv[0])
59 program_version = '@TOPLEVEL_VERSION@'
64 def guess_lilypond_version (filename):
65 s = open (filename).read ()
66 m = lilypond_version_re.search (s)
72 class FatalConversionError:
80 def do_one_file (infile_name):
81 sys.stderr.write (_ ("Processing `%s\'... ") % infile_name)
82 sys.stderr.write ('\n')
85 outfile_name = infile_name + '.NEW'
86 elif __main__.outfile_name:
87 outfile_name = __main__.outfile_name
89 if __main__.from_version:
90 from_version = __main__.from_version
92 guess = guess_lilypond_version (infile_name)
94 raise UnknownVersion ()
95 from_version = str_to_tuple (guess)
97 if __main__.to_version:
98 to_version = __main__.to_version
100 to_version = latest_version ()
104 infile = open (infile_name, 'r')
109 (last, result) = do_conversion (infile.read (), from_version, to_version)
114 newversion = r'\version "%s"' % tup_to_str (last)
115 if lilypond_version_re.search (result):
116 result = re.sub (lilypond_version_re_str,
117 '\\' + newversion, result)
119 result = newversion + '\n' + result
121 error_file.write ('\n')
125 os.remove(infile_name + '~')
128 os.rename (infile_name, infile_name + '~')
129 outfile = open (infile_name, 'w')
134 outfile.write (result)
145 global from_version, to_version, edit, show_rules_p, add_version
147 (sh, long) = ly.getopt_args (option_definitions)
149 (options, files) = getopt.getopt (sys.argv[1:], sh, long)
150 except getopt.error, s:
151 sys.stderr.write ('\n')
152 ly.error (_ ("getopt says: `%s'" % s))
153 sys.stderr.write ('\n')
161 if o == '--help' or o == '-h':
164 elif o == '--version' or o == '-v':
165 ly.identify (sys.stdout)
167 elif o== '--from' or o=='-f':
168 from_version = str_to_tuple (a)
169 elif o== '--to' or o=='-t':
170 to_version = str_to_tuple (a)
171 elif o== '--edit' or o == '-e':
173 elif o== '--show-rules' or o == '-s':
175 elif o == '--no-version' or o == '-n':
185 files = do_options ()
187 # should parse files[] to read \version?
189 show_rules (sys.stdout, from_version, to_version)
192 ly.identify (sys.stderr)
201 elif not os.path.isfile (f):
202 ly.error (_ ("can't open file: `%s'") % f)
208 except UnknownVersion:
209 ly.error (_ ("can't determine version for `%s'. Skipping") % f)
211 sys.stderr.write ('\n')