+class SetEvent (Music):
+ def __init__ (self, contextprop, value):
+ Music.__init__ (self)
+ self.context_prop = contextprop
+ self.value = value
+ def ly_expression (self):
+ if self.value:
+ return "\\set %s = %s" % (self.context_prop, self.value)
+ else:
+ return ''
+
+class StaffLinesEvent (Music):
+ def __init__ (self, lines):
+ Music.__init__ (self)
+ self.lines = lines
+ def ly_expression (self):
+ if (self.lines > 0):
+ return "\\stopStaff \\override Staff.StaffSymbol.line-count = #%s \\startStaff" % self.lines
+ else:
+ return "\\stopStaff \\revert Staff.StaffSymbol.line-count \\startStaff"
+
+class TempoMark (Music):
+ def __init__ (self):
+ Music.__init__ (self)
+ self.baseduration = None
+ self.newduration = None
+ self.beats = None
+ self.parentheses = False
+ def set_base_duration (self, dur):
+ self.baseduration = dur
+ def set_new_duration (self, dur):
+ self.newduration = dur
+ def set_beats_per_minute (self, beats):
+ self.beats = beats
+ def set_parentheses (self, parentheses):
+ self.parentheses = parentheses
+ def wait_for_note (self):
+ return False
+ def duration_to_markup (self, dur):
+ if dur:
+ # Generate the markup to print the note, use scheme mode for
+ # ly_expression to get longa and not \longa (which causes an error)
+ return "\\general-align #Y #DOWN \\smaller \\note #\"%s\" #UP" % dur.ly_expression(None, True)
+ else:
+ return ''
+ def tempo_markup_template (self):
+ return "\\mark\\markup { \\fontsize #-2 \\line { %s } }"
+ def ly_expression (self):
+ res = ''
+ if not self.baseduration:
+ return res
+ if self.beats:
+ if self.parentheses:
+ res += "\\tempo \"\" %s=%s" % (self.baseduration.ly_expression(), self.beats)
+ else:
+ res += "\\tempo %s=%s" % (self.baseduration.ly_expression(), self.beats)
+ elif self.newduration:
+ dm = self.duration_to_markup (self.baseduration)
+ ndm = self.duration_to_markup (self.newduration)
+ if self.parentheses:
+ contents = "\"(\" %s = %s \")\"" % (dm, ndm)
+ else:
+ contents = " %s = %s " % (dm, ndm)
+ res += self.tempo_markup_template() % contents
+ else:
+ return ''
+ return res
+
+class FiguredBassNote (Music):
+ def __init__ (self):
+ Music.__init__ (self)
+ self.number = ''
+ self.prefix = ''
+ self.suffix = ''
+ def set_prefix (self, prefix):
+ self.prefix = prefix
+ def set_suffix (self, suffix):
+ self.prefix = suffix
+ def set_number (self, number):
+ self.number = number
+ def ly_expression (self):
+ res = ''
+ if self.number:
+ res += self.number
+ else:
+ res += '_'
+ if self.prefix:
+ res += self.prefix
+ if self.suffix:
+ res += self.suffix
+ return res
+
+
+class FiguredBassEvent (NestedMusic):
+ def __init__ (self):
+ NestedMusic.__init__ (self)
+ self.duration = None
+ self.real_duration = 0
+ self.parentheses = False
+ return
+ def set_duration (self, dur):
+ self.duration = dur
+ def set_parentheses (self, par):
+ self.parentheses = par
+ def set_real_duration (self, dur):
+ self.real_duration = dur
+
+ def print_ly (self, printer):
+ figured_bass_events = [e for e in self.elements if
+ isinstance (e, FiguredBassNote)]
+ if figured_bass_events:
+ notes = []
+ for x in figured_bass_events:
+ notes.append (x.ly_expression ())
+ contents = string.join (notes)
+ if self.parentheses:
+ contents = '[%s]' % contents
+ printer ('<%s>' % contents)
+ self.duration.print_ly (printer)
+