]> git.donarmstrong.com Git - lilypond.git/blobdiff - scripts/convert-ly.py
* The grand 2005-2006 replace.
[lilypond.git] / scripts / convert-ly.py
index 95316c5a0e53417938ebc3f6c8ce9b739c9b61b8..9c22d98fa880c7635698dbdd5123f58c392a18fe 100644 (file)
@@ -4,8 +4,11 @@
 #
 # source file of the GNU LilyPond music typesetter
 #
-# (c) 1998--2005  Han-Wen Nienhuys <hanwen@cs.uu.nl>
+# (c) 1998--2006  Han-Wen Nienhuys <hanwen@cs.uu.nl>
 #                 Jan Nieuwenhuizen <janneke@gnu.org>
+#
+# converting rules are found in python/convertrules.py
+#
 
 import os
 import sys
@@ -19,7 +22,10 @@ if not os.path.isdir (datadir):
 if os.environ.has_key ('LILYPONDPREFIX'):
        datadir = os.environ['LILYPONDPREFIX']
        while datadir[-1] == os.sep:
-               datadir= datadir[:-1]
+               datadir = datadir[:-1]
+
+if os.path.exists (os.path.join (datadir, 'share/lilypond/@TOPLEVEL_VERSION@/')):
+       datadir = os.path.join (datadir, 'share/lilypond/@TOPLEVEL_VERSION@/')
 
 sys.path.insert (0, os.path.join (datadir, 'python'))
 
@@ -58,9 +64,64 @@ option_definitions = [
 program_name = os.path.basename (sys.argv[0])
 program_version = '@TOPLEVEL_VERSION@'
 
-
 add_version = 1
 
+def str_to_tuple (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]:
+               if t1[x] - t2[x]:
+                       return t1[x] - t2[x]
+       return 0
+
+def get_conversions (from_version, to_version):
+       def is_applicable (v, f = from_version, t = to_version):
+               return version_cmp (v[0], f) > 0 and version_cmp (v[0], t) <= 0
+       return filter (is_applicable, conversions)
+
+def latest_version ():
+       return conversions[-1][0]
+
+def show_rules (file, from_version, to_version):
+       for x in 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]))
+
+def do_conversion (str, from_version, to_version):
+       """Apply conversions from FROM_VERSION to TO_VERSION.  Return
+tuple (LAST,STR), with the last succesful conversion and the resulting
+string."""
+       conv_list = get_conversions (from_version, to_version)
+
+       if error_file:
+               error_file.write (_ ("Applying conversion: "))
+               
+       last_conversion = ()
+       try:
+               for x in conv_list:
+                       error_file.write (tup_to_str (x[0]))
+                       if x != conv_list[-1]:
+                               error_file.write (', ')
+                       str = x[1] (str)
+                       last_conversion = x[0]
+
+       except FatalConversionError:
+               error_file.write (_ ("error while converting")) 
+               error_file.write ('\n')
+               error_file.write (_ ("Aborting"))
+               error_file.write ('\n')
+
+
+
+       return (last_conversion, str)
+
+
+
 def guess_lilypond_version (filename):
        s = open (filename).read ()
        m = lilypond_version_re.search (s)
@@ -72,8 +133,6 @@ def guess_lilypond_version (filename):
 class FatalConversionError:
        pass
 
-conversions = []
-
 class UnknownVersion:
        pass
 
@@ -162,7 +221,7 @@ def do_options ():
                        ly.help ()
                        sys.exit (0)
                elif o == '--version' or o == '-v':
-                       print_version ()
+                       ly.identify (sys.stdout)
                        sys.exit (0)
                elif o== '--from' or o=='-f':
                        from_version = str_to_tuple (a)