# (c) 1998--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
# Jan Nieuwenhuizen <janneke@gnu.org>
-
-# TODO
-# use -f and -t for -s output
-
-# NEWS
-# 0.2
-# - rewrite in python
-
import os
import sys
import __main__
def program_id ():
- return '%s (GNU LilyPond) %s' %(program_name, version);
+ return '%s (GNU LilyPond) %s' % (program_name, version)
def identify ():
sys.stderr.write (program_id () + '\n')
Options:
-h, --help print this help
-e, --edit edit in place
- -f, --from=VERSION start from version; overrides \version found in file
+ -f, --from=VERSION start from version [default: \version found in file]
-s, --show-rules print all rules
- -t, --to=VERSION show target version
+ -t, --to=VERSION end at version [default: @TOPLEVEL_VERSION@]
-n, --no-version don't add new version stamp
--version print program version
it under certain conditions. invoke as `%s --warranty' for more
information.
-""" % (program_id() , program_name))
+""" % (program_id (), program_name))
-def gulp_file(f):
- try:
- i = open(f)
- i.seek (0, 2)
- n = i.tell ()
- i.seek (0,0)
- except:
- print 'can\'t open file: ' + f + '\n'
- return ''
- s = i.read (n)
- if len (s) <= 0:
- print 'gulped empty file: ' + f + '\n'
- i.close ()
- return s
-
def str_to_tuple (s):
- return tuple (map (string.atoi, string.split (s,'.')))
+ return tuple (map (string.atoi, string.split (s, '.')))
def tup_to_str (t):
return string.join (map (lambda x: '%s' % x, list (t)), '.')
def version_cmp (t1, t2):
- for x in [0,1,2]:
+ for x in [0, 1, 2]:
if t1[x] - t2[x]:
return t1[x] - t2[x]
return 0
def guess_lilypond_version (filename):
- s = gulp_file (filename)
+ s = open (filename).read ()
m = lilypond_version_re.search (s)
if m:
return m.group (2)
def show_rules (file):
for x in conversions:
- file.write ('%s: %s\n' % (tup_to_str (x[0]), x[2]))
+ if (not from_version or x[0] > from_version) \
+ and (not to_version or x[0] <= to_version):
+ file.write ('%s: %s\n' % (tup_to_str (x[0]), x[2]))
############################
def conv (str):
return str
-conversions.append (((2,2, 0), conv,
+conversions.append (((2, 2, 0), conv,
'''clean up version. '''))
def conv (str):
'''\\apply -> \\applymusic'''))
def conv (str):
+ if re.search ('textheight', str):
+ sys.stderr.write("\nWarning: tuning of page layout has changed. See reference manual.\n")
+
str = re.sub (r'\\OrchestralScoreContext', '\\Score', str)
def func(m):
if m.group(1) not in ['RemoveEmptyStaff',
+def conv (str):
+ str = re.sub (r'lastpagefill\s*=\s*"?1"', 'raggedlastbottom = ##t', str)
+ return str
+
+conversions.append (((2, 3, 6), conv,
+ '''lastpagefill -> raggedlastbottom'''))
+
+
+
def conv (str):
str = re.sub (r'\\consistsend', '\\consists', str)
str = re.sub (r'\\lyricsto\s+("?[a-zA-Z]+"?)(\s*\\new Lyrics\s*)?\\lyrics',
def conv (str):
str = re.sub (r'\\addlyrics', r'\\oldaddlyrics', str)
str = re.sub (r'\\newlyrics', r'\\addlyrics', str)
+ if re.search (r"\\override\s*TextSpanner", str):
+ sys.stderr.write ("\nWarning: TextSpanner has been split into DynamicTextSpanner and TextSpanner\n")
return str
conversions.append (((2, 3, 10), conv,
}""", str)
str = re.sub (r'\\scriptBoth', r"""{
\\revert TextScript #'direction
- \\override Script #'direction
+ \\revert Script #'direction
}""", str)
str = re.sub ('soloADue', 'printPartCombineTexts', str)
str = re.sub (r'\\applymusic\s*#notes-to-clusters',
'\\makeClusters', str)
+
+ str = re.sub (r'pagenumber\s*=', 'firstpagenumber', str)
return str
conversions.append (((2, 3, 12), conv,
def conv (str):
str = re.sub (r'(slur|stem|phrasingSlur|tie|dynamic|dots|tuplet|arpeggio|)Both', r'\1Neutral', str)
-
+ str = re.sub (r"\\applymusic\s*#\(remove-tag\s*'([a-z-0-9]+)\)",
+ r"\\removeWithTag #'\1", str)
return str
conversions.append (((2, 3, 17), conv,
'''\foo -> \foomode (for chords, notes, etc.)
fold \new FooContext \foomode into \foo.'''))
+
+def conv (str):
+ str = re.sub (r'Text_item', 'Text_interface', str)
+ return str
+
+conversions.append (((2, 3, 18),
+ conv,
+ '''Text_item -> Text_interface''' ))
+
+def conv (str):
+ str = re.sub (r'\\paper', r'\\layout', str)
+ str = re.sub (r'\\bookpaper', r'\\paper', str)
+ if re.search ('paper-set-staff-size', str):
+ sys.stderr.write ('''\nWarning: staff size should be changed at top-level
+with
+
+ #(set-global-staff-size <STAFF-HEIGHT-IN-POINT>)
+
+''')
+
+
+ str = re.sub (r'#\(paper-set-staff-size', '%Use set-global-staff-size at toplevel\n% #(layout-set-staff-size', str)
+ return str
+
+conversions.append (((2, 3, 22),
+ conv,
+ '''paper -> layout
+ bookpaper -> paper''' ))
+
+
+def conv (str):
+ str = re.sub (r'\\context\s+([a-zA-Z]+)\s*=\s*([a-z]+)\s',
+ r'\\context \1 = "\2" ',
+ str )
+ return str
+
+conversions.append (((2, 3, 23),
+ conv,
+ '''\context Foo = NOTENAME -> \context Foo = "NOTENAME"'''))
+
+
+def conv (str):
+ return str
+
+conversions.append (((2, 4, 0),
+ conv,
+ ''))
+
+
+def conv (str):
+ str = re.sub (r'\\quote\s+"?([a-zA-Z0-9]+)"?\s+([0-9.*/]+)',
+ r'\\quoteDuring #"\1" { \skip \2 }',
+ str
+ )
+ return str
+
+conversions.append (((2, 5, 0),
+ conv,
+ ''))
+
+
+def conv (str):
+ str = re.sub (r'ly:import-module',
+ r'ly:module-copy', str)
+ return str
+
+conversions.append (((2, 5, 1),
+ conv,
+ 'ly:import-module -> ly:module-copy'))
+
+def conv (str):
+ str = re.sub (r'\\(column|fill-line|dir-column|center-align|right-align|left-align|bracketed-y-column)\s*<([^<]*)>',
+ r'\\\1 {\2}', str)
+ str = re.sub (r'\\(column|fill-line|dir-column|center-align|right-align|left-align|bracketed-y-column)\s*<([^<]*)>',
+ r'\\\1 {\2}', str)
+ str = re.sub (r'\\(column|fill-line|dir-column|center-align|right-align|left-align|bracketed-y-column)\s*<([^<]*)>',
+ r'\\\1 {\2}', str)
+ return str
+
+conversions.append (((2, 5, 2),
+ conv,
+ '\markup .. < .. > .. -> \markup .. { .. } ..'))
+
+def conv (str):
+ str = re.sub ('ly:find-glyph-by-name', 'ly:font-get-glyph', str)
+ str = re.sub ('"(scripts|clefs|accidentals)-', r'"\1.', str)
+ str = re.sub ("'hufnagel-do-fa", "'hufnagel.do.fa", str)
+ str = re.sub ("'(vaticana|hufnagel|medicaea|petrucci|neomensural|mensural)-", r"'\1.", str)
+ return str
+
+conversions.append (((2, 5, 3),
+ conv,
+ 'ly:find-glyph-by-name -> ly:font-get-glyph, remove - from glyphnames.'))
+
+
+
+def conv (str):
+ if re.search (r"\\encoding", str):
+ sys.stderr.write ("Sorry, input files should be UTF8.\n"
+ + "Please convert by hand.")
+ raise FatalConversionError()
+
+ return str
+
+conversions.append (((2, 5, 2),
+ conv,
+ 'ly:find-glyph-by-name -> ly:font-get-glyph, remove - from glyphnames.'))
+
+
################################
# END OF CONVERSIONS
################################
last_conversion = ()
try:
for x in conv_list:
- sys.stderr.write (tup_to_str (x[0]) + ', ')
+ sys.stderr.write (tup_to_str (x[0]) + ', ')
str = x[1] (str)
last_conversion = x[0]
new_ver = '\\version \"%s\"' % tup_to_str (last_conversion)
if re.search (lilypond_version_re_str, str):
- str = re.sub (lilypond_version_re_str,'\\'+new_ver , str)
+ str = re.sub (lilypond_version_re_str,'\\'+new_ver, str)
elif add_version:
str = new_ver + '\n' + str
- outfile.write(str)
+ outfile.write (str)
return last_conversion
else:
guess = guess_lilypond_version (infile_name)
if not guess:
- raise UnknownVersion()
+ raise UnknownVersion ()
from_version = str_to_tuple (guess)
if __main__.to_version:
to_version = ()
from_version = ()
outfile_name = ''
+show_rules_p = 0
-(options, files) = getopt.getopt (
- sys.argv[1:], 'ao:f:t:senh', ['no-version', 'version', 'output', 'show-rules', 'help', 'edit', 'from=', 'to='])
+(options, files) = getopt.getopt (sys.argv[1:], 'ao:f:t:senh',
+ ['no-version', 'version', 'output',
+ 'show-rules', 'help', 'edit',
+ 'from=', 'to='])
for opt in options:
o = opt[0]
a = opt[1]
- if o== '--help' or o == '-h':
+ if o == '--help' or o == '-h':
usage ()
sys.exit (0)
- if o == '--version' or o == '-v':
+ elif o == '--version' or o == '-v':
print_version ()
sys.exit (0)
elif o== '--from' or o=='-f':
elif o== '--edit' or o == '-e':
edit = 1
elif o== '--show-rules' or o == '-s':
- show_rules (sys.stdout)
- sys.exit(0)
+ show_rules_p = 1
elif o == '--output' or o == '-o':
outfile_name = a
elif o == '--no-version' or o == '-n':
print o
raise getopt.error
+# should parse files[] to read \version?
+if show_rules_p:
+ show_rules (sys.stdout)
+ sys.exit (0)
+
identify ()
for f in files:
if f == '-':
sys.stderr.write ('\n')
if assume_old:
fv = from_version
- from_version = (0,0,0)
+ from_version = (0, 0, 0)
do_one_file (f)
from_version = fv
else: