X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scripts%2Fabc2ly.py;h=553c400ea4d9e5bbf73947138ef10d1ffe49491c;hb=318e585dcc5c6a4493c220ab23fc04f0c051207e;hp=664d73ec481ffebf47f1f8a640bc1d0759c7a177;hpb=3761f50a69bd34d6ff6da9c6a18d25c006d44362;p=lilypond.git diff --git a/scripts/abc2ly.py b/scripts/abc2ly.py index 664d73ec48..553c400ea4 100644 --- a/scripts/abc2ly.py +++ b/scripts/abc2ly.py @@ -1,11 +1,11 @@ -#!@PYTHON@ +#!@TARGET_PYTHON@ # -*- coding: utf-8 -*- # once upon a rainy monday afternoon. # # ... # # (not finished.) -# ABC standard v1.6: http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt +# ABC standard v1.6: http://www.walshaw.plus.com/abc/ # # Enhancements (Roy R. Rankin) # @@ -33,6 +33,7 @@ # %%LY now supported. # \breve and \longa supported. # M:none doesn't crash lily. +# lilypond '--' supported. # Enhancements (Guy Gascoigne-Piggford) # @@ -77,25 +78,9 @@ import os program_name = sys.argv[0] -datadir = '@local_lilypond_datadir@' -if not os.path.isdir (datadir): - datadir = '@lilypond_datadir@' - -sys.path.insert (0, os.path.join (datadir, 'python')) - -if os.environ.has_key ('LILYPONDPREFIX'): - datadir = os.environ['LILYPONDPREFIX'] - while datadir[-1] == os.sep: - datadir= datadir[:-1] - - datadir = os.path.join (datadir, "share/lilypond/current/") -sys.path.insert (0, os.path.join (datadir, 'python')) - -# dynamic relocation, for GUB binaries. -bindir = os.path.split (sys.argv[0])[0] -for p in ['share', 'lib']: - datadir = os.path.abspath (bindir + '/../%s/lilypond/current/python/' % p) - sys.path.insert (0, os.path.join (datadir)) +""" +@relocate-preamble@ +""" import lilylib as ly global _;_=ly._ @@ -263,13 +248,13 @@ def try_parse_q(a): if string.count(a, '/') == 1: array=string.split(a,'/') numerator=array[0] - if numerator != 1: + if int(numerator) != 1: sys.stderr.write("abc2ly: Warning, unable to translate a Q specification with a numerator of %s: %s\n" % (numerator, a)) array2=string.split(array[1],'=') denominator=array2[0] perminute=array2[1] duration=str(string.atoi(denominator)/string.atoi(numerator)) - midi_specs=string.join(["\\tempo", duration, "=", perminute]) + midi_specs=string.join([" \n\t\t\context {\n\t\t \Score tempoWholesPerMinute = #(ly:make-moment ", perminute, " ", duration, ")\n\t\t }\n"]) else: sys.stderr.write("abc2ly: Warning, unable to parse Q specification: %s\n" % a) @@ -336,7 +321,7 @@ def gulp_file(f): n = i.tell () i.seek (0,0) except: - sys.stderr.write ("can't open file: `%s'\n" % f) + sys.stderr.write ("cannot open file: `%s'\n" % f) return '' s = i.read (n) if len (s) <= 0: @@ -536,7 +521,7 @@ def try_parse_tuplet_begin (str, state): dig = str[1] str = str[2:] prev_tuplet_state = state.parsing_tuplet - state.parsing_tuplet = string.atoi (dig[0]) + state.parsing_tuplet = string.atoi (dig[0]) if prev_tuplet_state: voices_append ("}") voices_append ("\\times %s {" % tup_lookup[dig]) @@ -625,7 +610,7 @@ def fix_lyric(str): def slyrics_append(a): a = re.sub ( '_', ' _ ', a) # _ to ' _ ' - a = re.sub ( '-', '- ', a) # split words with - + a = re.sub ( '([^-])-([^-])', '\\1- \\2', a) # split words with "-" unless was originally "--" a = re.sub ( '\\\\- ', '-', a) # unless \- a = re.sub ( '~', '_', a) # ~ to space('_') a = re.sub ( '\*', '_ ', a) # * to to space @@ -898,6 +883,8 @@ artic_tbl = { '~' : '^"~" ', 'J' : '', # ignore slide 'R' : '', # ignore roll + 'S' : '^\\segno', + 'O' : '^\\coda', 'v' : '^\\downbow' } @@ -1185,7 +1172,7 @@ def try_parse_bar (str,state): close_beam_state(state) voices_append (bs) if do_curly != '': - voices_append("} }") + voices_append("} ") do_curly = '' return str @@ -1271,7 +1258,7 @@ def try_parse_comment (str): #convention, such as most music written before 1700, or ethnic music in #non-western scales, it is necessary to be able to tell a translator that #the barlines should not affect its interpretation of the pitch. - if (string.find(str,'nobarlines') > 0): + if 'nobarlines' in str: nobarlines = 1 elif str[0:3] == '%LY': p = string.find(str, 'voices') @@ -1344,7 +1331,7 @@ def identify(): sys.stderr.write ("%s from LilyPond %s\n" % (program_name, version)) authors = """ -Written by Han-Wen Nienhuys , Laura Conrad +Written by Han-Wen Nienhuys , Laura Conrad , Roy Rankin . """ @@ -1352,28 +1339,37 @@ def print_version (): print r"""abc2ly (GNU lilypond) %s""" % version def get_option_parser (): - p = ly.get_option_parser (usage='abc2ly [OPTIONS] FILE', - version="abc2ly (LilyPond) @TOPLEVEL_VERSION@", - description=_('''This program converts ABC music files (see -http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt) to LilyPond input.''')) - - p.add_option ('-o', '--output', metavar='FILE',help=_("set output filename to FILE"), - action='store') - p.add_option ('-s', '--strict', help=_("be strict about succes"), - action='store_true') - p.add_option ('-b', '--beams', help=_("preserve ABC's notion of beams")) - p.add_option_group ('bugs', - description='''Report bugs via http://post.gmane.org/post.php''' - '''?group=gmane.comp.gnu.lilypond.bugs\n''') - + p = ly.get_option_parser (usage=_ ("%s [OPTION]... FILE") % 'abc2ly', + description=_ ('''abc2ly converts ABC music files (see +%s) to LilyPond input.''') % 'http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt', + add_help_option=False) + + p.version = "abc2ly (LilyPond) @TOPLEVEL_VERSION@" + p.add_option("--version", + action="version", + help=_ ("show version number and exit")) + + p.add_option("-h", "--help", + action="help", + help=_ ("show this help and exit")) + p.add_option ('-o', '--output', metavar='FILE', + help=_ ("write output to FILE"), + action='store') + p.add_option ('-s', '--strict', help=_ ("be strict about success"), + action='store_true') + p.add_option ('-b', '--beams', help=_ ("preserve ABC's notion of beams")) + p.add_option_group (ly.display_encode (_ ('Bugs')), + description=(_ ('Report bugs via') + + ''' http://post.gmane.org/post.php''' + '''?group=gmane.comp.gnu.lilypond.bugs\n''')) return p -option_parser = get_option_parser() -(global_options, files) = option_parser.parse_args() +option_parser = get_option_parser () +(global_options, files) = option_parser.parse_args () -identify() +identify () header['tagline'] = 'Lily was here %s -- automatically converted from ABC' % version for f in files: