]> git.donarmstrong.com Git - lilypond.git/blobdiff - scripts/convert-ly.py
Run `make grand-replace'.
[lilypond.git] / scripts / convert-ly.py
index d4e4ceecc284c4a335dbd999ab58b399d2fbdb1e..481ae745a340889c2acdf396c076c956239d83fa 100644 (file)
@@ -4,7 +4,7 @@
 #
 # source file of the GNU LilyPond music typesetter
 #
-# (c) 1998--2007  Han-Wen Nienhuys <hanwen@xs4all.nl>
+# (c) 1998--2008  Han-Wen Nienhuys <hanwen@xs4all.nl>
 #                 Jan Nieuwenhuizen <janneke@gnu.org>
 #
 # converting rules are found in python/convertrules.py
@@ -12,7 +12,6 @@
 
 import os
 import sys
-import string
 import re
 
 """
@@ -22,6 +21,8 @@ import re
 import lilylib as ly
 global _;_=ly._
 
+ly.require_python_version ()
+
 import convertrules
 
 lilypond_version_re_str = '\\\\version *\"([0-9.]+)"'
@@ -33,8 +34,8 @@ _ ('''Update LilyPond input to newer version.  By default, update from the
 version taken from the \\version command, to the current LilyPond version.''')
 + _ ("Examples:")
 + '''
-  convert-ly -e old.ly
-  convert-ly --from=2.3.28 --to 2.5.21 foobar.ly
+  convert-ly -e old.ly
+  $ convert-ly --from=2.3.28 --to=2.5.21 foobar.ly > foobar-new.ly
 ''')
 
 copyright = ('Jan Nieuwenhuizen <janneke@gnu.org>',
@@ -43,6 +44,8 @@ copyright = ('Jan Nieuwenhuizen <janneke@gnu.org>',
 program_name = os.path.basename (sys.argv[0])
 program_version = '@TOPLEVEL_VERSION@'
 
+error_file_write = ly.stderr_write
+
 def warning (s):
     ly.stderr_write (program_name + ": " + _ ("warning: %s") % s + '\n')
 
@@ -90,25 +93,32 @@ def get_option_parser ():
     
     p.add_option ('-e', '--edit', help=_ ("edit in place"),
               action='store_true')
+
     p.add_option ('-n', '--no-version',
               help=_ ("do not add \\version command if missing"),
               action='store_true',
               dest='skip_version_add',
               default=False)
+
+    p.add_option ('-c', '--current-version',
+              help=_ ("force updating \\version number to %s") % program_version,
+              action='store_true',
+              dest='force_current_version',
+              default=False)
     
     p.add_option ("-s", '--show-rules',
-              help=_ ("show rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"),
+              help=_ ("show rules [default: -f 0, -t %s]") % program_version,
               dest='show_rules',
               action='store_true', default=False)
     
     p.add_option ('-t', '--to',
-              help=_ ("convert to VERSION [default: @TOPLEVEL_VERSION@]"),
+              help=_ ("convert to VERSION [default: %s]") % program_version,
               metavar=_ ('VERSION'),
               action='store',
               dest="to_version",
               default='')
 
-    p.add_option_group (ly.display_encode (_ ('Bugs')),
+    p.add_option_group ('',
                         description=(_ ("Report bugs via")
                                      + ''' http://post.gmane.org/post.php'''
                                      '''?group=gmane.comp.gnu.lilypond.bugs\n'''))
@@ -118,10 +128,10 @@ def get_option_parser ():
 
 
 def str_to_tuple (s):
-    return tuple (map (int, string.split (s, '.')))
+    return tuple ([int(n) for n in s.split ('.')])
 
 def tup_to_str (t):
-    return string.join (map (lambda x: '%s' % x, list (t)), '.')
+    return '.'.join (['%s' % x for x in t])
 
 def version_cmp (t1, t2):
     for x in [0, 1, 2]:
@@ -141,7 +151,7 @@ def show_rules (file, from_version, to_version):
     for x in convertrules.conversions:
         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]))
+            ly.encoded_write  (file, '%s: %s\n' % (tup_to_str (x[0]), x[2]))
 
 def do_conversion (str, from_version, to_version):
     """Apply conversions from FROM_VERSION to TO_VERSION.  Return
@@ -149,32 +159,30 @@ tuple (LAST,STR), with the last succesful conversion and the resulting
 string."""
     conv_list = get_conversions (from_version, to_version)
 
-    if convertrules.error_file:
-        convertrules.error_file.write (_ ("Applying conversion: "))
+    error_file_write (_ ("Applying conversion: "))
         
     last_conversion = ()
     try:
         for x in conv_list:
-            convertrules.error_file.write (tup_to_str (x[0]))
+            error_file_write (tup_to_str (x[0]))
             if x != conv_list[-1]:
-                convertrules.error_file.write (', ')
+                error_file_write (', ')
             str = x[1] (str)
             last_conversion = x[0]
 
     except convertrules.FatalConversionError:
-        convertrules.error_file.write ('\n'
-                                       + _ ("Error while converting")
-                                       + '\n'
-                                       + _ ("Stopping at last succesful rule")
-                                       + '\n')
+        error_file_write ('\n'
+                          + _ ("Error while converting")
+                          + '\n'
+                          + _ ("Stopping at last successful rule")
+                          + '\n')
 
     return (last_conversion, str)
 
 
 
-def guess_lilypond_version (filename):
-    s = open (filename).read ()
-    m = lilypond_version_re.search (s)
+def guess_lilypond_version (input):
+    m = lilypond_version_re.search (input)
     if m:
         return m.group (1)
     else:
@@ -190,12 +198,19 @@ def do_one_file (infile_name):
     ly.stderr_write (_ ("Processing `%s\'... ") % infile_name)
     sys.stderr.write ('\n')
 
+    if infile_name:
+        infile = open (infile_name, 'r')
+        input = infile.read ()
+        infile.close ()
+    else:
+        input = sys.stdin.read ()
+
     from_version = None
     to_version = None
     if global_options.from_version:
         from_version = global_options.from_version
     else:
-        guess = guess_lilypond_version (infile_name)
+        guess = guess_lilypond_version (input)
         if not guess:
             raise UnknownVersion ()
         from_version = str_to_tuple (guess)
@@ -206,16 +221,12 @@ def do_one_file (infile_name):
         to_version = latest_version ()
 
 
-    if infile_name:
-        infile = open (infile_name, 'r')
-    else:
-        infile = sys.stdin
-
-
-    (last, result) = do_conversion (infile.read (), from_version, to_version)
-    infile.close ()
+    (last, result) = do_conversion (input, from_version, to_version)
 
     if last:
+        if global_options.force_current_version and last == to_version:
+            last = str_to_tuple (program_version)
+
         newversion = r'\version "%s"' % tup_to_str (last)
         if lilypond_version_re.search (result):
             result = re.sub (lilypond_version_re_str,
@@ -223,7 +234,7 @@ def do_one_file (infile_name):
         elif not global_options.skip_version_add:
             result = newversion + '\n' + result
             
-        convertrules.error_file.write ('\n')            
+        error_file_write ('\n')            
     
         if global_options.edit:
             try: