# * beams (better use autobeam?)
# * more robust: try entertainer.etf (freenote)
# * dynamics
+# * automatic `deletion' of invalid items
#
+
program_name = 'etf2ly'
version = '@TOPLEVEL_VERSION@'
if version == '@' + 'TOPLEVEL_VERSION' + '@':
self.finale = []
self.global_measure = None
self.staff = None
+ self.valid = 1
def add_finale_entry (self, entry):
self.finale.append (entry)
+ def valid (self):
+ return self.valid
def calculate (self):
if len (self.finale) < 2:
sys.stderr.write ("Measure %d in staff %d has incomplete information.\n" % (self.number, self.staff.number))
-
+ self.valid = 0
return
f0 = self.finale[0]
last_clef = None
gap = (0,1)
for m in self.measures[1:]:
- if not m :
+ if not m or not m.valid:
continue # ugh.
g = m.global_measure
first_frame = None
gap = (0,1)
for m in self.measures[1:]:
- if not m:
+ if not m or not m.valid:
continue
self.frames = [None]
self.tuplets = [None]
self.staffs = [None]
- self.slurs = [None]
+ self.slur_dict = {}
self.articulations = [None]
self.syllables = [None]
self.verses = [None]
if m:
slurno = string.atoi (m.group (1))
- if len (self.slurs) == slurno:
- self.slurs.append (Slur (slurno))
+ sl = None
+ try:
+ sl = self.slur_dict[slurno]
+ except KeyError:
+ sl = Slur (slurno)
+ self.slur_dict[slurno] = sl
params = list (m.groups ()[1:])
params = map (string.atoi, params)
- self.slurs[-1].append_entry (params)
+ sl.append_entry (params)
return m
def try_GF(self, l):
if not m:
continue
- m.global_measure = self.measures[mno]
m.calculate()
-
+ try:
+ m.global_measure = self.measures[mno]
+ except IndexError:
+ sys.stderr.write ("non-existent global measure %d" % mno)
+ continue
+
frame_obj_list = [None]
for frno in m.frames:
fr = self.frames[frno]
for t in self.tuplets[1:]:
t.calculate (self.chords)
- for s in self.slurs [1:]:
+ for s in self.slur_dict.values():
s.calculate (self.chords)
for s in self.articulations[1:]:
s.calculate (self.chords)
def get_thread (self, startno, endno):
thread = []
- c = self.chords[startno]
+
+ c = None
+ try:
+ c = self.chords[startno]
+ except IndexError:
+ sys.stderr.write ("Huh? Frame has invalid bounds (%d,%d)\n" % (startno, endno))
+ return []
+
+
while c and c.number () <> endno:
thread.append (c)
c = c.next
identify()
-# header['tagline'] = 'Lily was here %s -- automatically converted from ABC' % version
for f in files:
if f == '-':
f = ''