+
+class FunctionWrapperEvent (Event):
+ def __init__ (self, function_name = None):
+ Event.__init__ (self)
+ self.function_name = function_name
+ def pre_note_ly (self, is_chord_element):
+ if self.function_name:
+ return "\\%s" % self.function_name
+ else:
+ return ''
+ def pre_chord_ly (self):
+ return ''
+ def ly_expression (self):
+ if self.function_name:
+ return "\\%s" % self.function_name
+ else:
+ return ''
+
+class ParenthesizeEvent (FunctionWrapperEvent):
+ def __init__ (self):
+ FunctionWrapperEvent.__init__ (self, "parenthesize")
+
+class NotestyleEvent (Event):
+ def __init__ (self):
+ Event.__init__ (self)
+ self.style = None
+ self.filled = None
+ def pre_chord_ly (self):
+ if self.style:
+ return "\\once \\override NoteHead #'style = #%s" % self.style
+ else:
+ return ''
+ def pre_note_ly (self, is_chord_element):
+ if self.style and is_chord_element:
+ return "\\tweak #'style #%s" % self.style
+ else:
+ return ''
+ def ly_expression (self):
+ return self.pre_chord_ly ()
+
+
+class ChordPitch:
+ def __init__ (self):
+ self.alteration = 0
+ self.step = 0
+ def __repr__(self):
+ return self.ly_expression()
+ def ly_expression (self):
+ return pitch_generating_function (self)
+
+class ChordModification:
+ def __init__ (self):
+ self.alteration = 0
+ self.step = 0
+ self.type = 0
+ def ly_expression (self):
+ if self.type:
+ val = {1: ".", -1: "^" }.get (self.type, "")
+ val += "%s" % self.step
+ val += {1: "+", -1: "-"}.get (self.alteration, "")
+ return val
+ else:
+ return ''
+
+class ChordNameEvent (Event):
+ def __init__ (self):
+ Event.__init__ (self)
+ self.root = None
+ self.kind = None
+ self.duration = None
+ self.modifications = []
+ self.bass = None
+ def add_modification (self, mod):
+ self.modifications.append (mod)
+ def ly_expression (self):
+ if not self.root:
+ return ''
+ value = self.root.ly_expression ()
+ if self.duration:
+ value += self.duration.ly_expression ()
+ if self.kind:
+ value += ":"
+ value += self.kind
+ # First print all additions/changes, and only afterwards all subtractions
+ for m in self.modifications:
+ if m.type == 1:
+ value += m.ly_expression ()
+ for m in self.modifications:
+ if m.type == -1:
+ value += m.ly_expression ()
+ if self.bass:
+ value += "/+%s" % self.bass.ly_expression ()
+ return value
+
+