6 # source file of the GNU LilyPond music typesetter
8 # (c) 1998 Jan Nieuwenhuizen <janneke@gnu.org>
25 return name
+ ' version ' + version
;
28 sys
.stdout
.write (program_id () + '\n')
31 sys
.stdout
.write ("Usage: %s [options] [files]\n"
32 "Convert mup to ly\n\n"
34 + " -h, --help print this help\n"
40 (options
, files
) = getopt
.getopt (
41 sys
.argv
[1:], 'hp:', ['help', 'package'])
45 if o
== '--help' or o
== '-h':
47 elif o
== '-p' or o
== '--package':
54 sys
.stderr
.write ('[%s' % f
)
61 sys
.stderr
.write ('can\'t open file %s\n ' % f
)
64 sys
.stderr
.write (']')
66 sys
.stderr
.write ('gulped empty file: %s\n'% f
)
72 i
= regex
.search (";", s
)
78 i
= regex
.search (";", s
[o
+1:])
81 name
= regsub
.gsub ("[0-9<>\.&]*", "", note
)
82 duration
= regsub
.gsub ("[a-z+<>#+&\-]*", "", note
)
83 duration
= regsub
.gsub (" ", "", duration
)
89 last_duration
= duration
91 duration
= last_duration
92 name
= regsub
.sub ("#", "is", name
)
93 name
= regsub
.sub ("+", "'", name
)
94 name
= regsub
.sub ("-", ",", name
)
95 name
= regsub
.sub ("ms", "s1", name
)
96 notes
= notes
+ " %s%s" % (name
, duration
)
99 def get_voice (staff
, s
, staffs
):
100 voice
= len (staffs
[staff
-1]) + 1
101 tag
= "^%d [0-9-]*%d[0-9-]*:" % (staff
, voice
)
104 i
= regex
.search (tag
, s
)
107 n
= regex
.search ("$", s
[o
:])
109 line
= regsub
.sub (tag
, "", line
)
110 line
= line_to_ly (line
)
112 i
= regex
.search (tag
, s
[o
+n
:])
116 sys
.stderr
.write ('%d ' % voice
)
117 staffs
[staff
-1].append (notes
)
120 def get_staff (s
, staffs
):
123 sys
.stderr
.write ('Staff %d ( ' % staff
)
125 i
= get_voice (staff
, s
, staffs
)
127 sys
.stderr
.write (')\n')
130 sys
.stderr
.write ('Staff %d ( ' % staff
)
131 i
= get_voice (staff
, s
, staffs
)
138 ly
= os
.path
.basename (os
.path
.splitext (mup
)[0]) + ".ly"
140 sys
.stderr
.write ('\n')
143 i
=get_staff (s
, staffs
)
144 sys
.stderr
.write ('\n')
145 sys
.stderr
.write ('Ly output to: %s...' % ly
)
146 lyfile
= open (ly
, "w")
147 for i
in range (len (staffs
)):
148 for v
in range (len (staffs
[i
])):
149 lyfile
.write ("$staff%d_voice_%d = \\notes {\n %s\n}\n\n" % (i
+1, v
+1, staffs
[i
][v
]))
150 lyfile
.write ("\\score{\n")
151 lyfile
.write ("\\notes <\n")
152 for i
in range (len (staffs
)):
153 lyfile
.write ("\\type Staff=staff%s <\n" % chr(ord('A')+i
))
154 for v
in range (len (staffs
[i
])):
155 lyfile
.write ("{ \\$staff%d_voice_%d } " % (i
+1, v
+1))
156 lyfile
.write ("\n>\n")
160 sys
.stderr
.write ('\n')