X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=python%2Fmusicexp.py;fp=python%2Fmusicexp.py;h=ea2525d866e4085e3adb90de929a7ebd91ac4f53;hb=32a34dcef0c0041c6d62677487a380b5c8b85712;hp=68318678de073ea8ae5fec845dd6f8794793b94d;hpb=f41973ff763d5972a85995b6d40c864281ec6714;p=lilypond.git diff --git a/python/musicexp.py b/python/musicexp.py index 68318678de..ea2525d866 100644 --- a/python/musicexp.py +++ b/python/musicexp.py @@ -13,16 +13,13 @@ from rational import Rational previous_pitch = None relative_pitches = False -def warning (str): - ly.stderr_write ((_ ("warning: %s") % str) + "\n") - def escape_instrument_string (input_string): retstring = string.replace (input_string, "\"", "\\\"") if re.match ('.*[\r\n]+.*', retstring): rx = re.compile (r'[\n\r]+') strings = rx.split (retstring) - retstring = "\\markup { \\column { " + retstring = "\\markup { \\center-column { " for s in strings: retstring += "\\line {\"" + s + "\"} " retstring += "} }" @@ -201,6 +198,17 @@ class Duration: return base * dot_fact * self.factor +# implement the midi command line option '-m' and '--midi' +# if TRUE add midi-block to .ly file (see below) +def set_create_midi (option): + global midi_option + midi_option = option + +def get_create_midi (): + try: + return midi_option + except: + return False # Implement the different note names for the various languages def pitch_generic (pitch, notenames, accidentals): @@ -213,12 +221,12 @@ def pitch_generic (pitch, notenames, accidentals): # Handle remaining fraction to pitch.alteration (for microtones) if (halftones != pitch.alteration): if None in accidentals[1:3]: - warning (_ ("Language does not support microtones contained in the piece")) + ly.warning (_ ("Language does not support microtones contained in the piece")) else: try: str += {-0.5: accidentals[1], 0.5: accidentals[2]}[pitch.alteration-halftones] except KeyError: - warning (_ ("Language does not support microtones contained in the piece")) + ly.warning (_ ("Language does not support microtones contained in the piece")) return str def pitch_general (pitch): @@ -480,7 +488,7 @@ class TimeScaledMusic (MusicWrapper): func ("\\once \\override TupletBracket #'stencil = ##f") func.newline () elif self.display_bracket == "curved": - warning (_ ("Tuplet brackets of curved shape are not correctly implemented")) + ly.warning (_ ("Tuplet brackets of curved shape are not correctly implemented")) func ("\\once \\override TupletBracket #'stencil = #ly:slur::print") func.newline () @@ -666,7 +674,7 @@ class RepeatedMusic: self.music = SequentialMusic () self.music.elements = music else: - warning (_ ("unable to set the music %(music)s for the repeat %(repeat)s") % \ + ly.warning (_ ("unable to set the music %(music)s for the repeat %(repeat)s") % \ {'music':music, 'repeat':self}) def add_ending (self, music): self.endings.append (music) @@ -675,7 +683,7 @@ class RepeatedMusic: if self.music: self.music.print_ly (printer) else: - warning (_ ("encountered repeat without body")) + ly.warning (_ ("encountered repeat without body")) printer.dump ('{}') if self.endings: printer.dump ('\\alternative {') @@ -845,7 +853,7 @@ class ChordEvent (NestedMusic): # don't print newlines after the { and } braces self.grace_elements.print_ly (printer, False) elif self.grace_elements: # no self.elements! - warning (_ ("Grace note with no following music: %s") % self.grace_elements) + ly.warning (_ ("Grace note with no following music: %s") % self.grace_elements) if self.grace_type: printer ('\\%s' % self.grace_type) else: @@ -1007,7 +1015,7 @@ class OctaveShiftEvent (SpanEvent): try: value = {8: 1, 15: 2}[self.size] except KeyError: - warning (_ ("Invalid octave shift size found: %s. Using no shift.") % self.size) + ly.warning (_ ("Invalid octave shift size found: %s. Using no shift.") % self.size) value = 0 # negative values go up! value *= -1*self.span_type @@ -1465,7 +1473,7 @@ class KeySignatureChange (Music): try: accidental = alter_dict[a[1]] except KeyError: - warning (_ ("Unable to convert alteration %s to a lilypond expression") % a[1]) + ly.warning (_ ("Unable to convert alteration %s to a lilypond expression") % a[1]) return '' if len (a) == 2: return "( %s . %s )" % (a[0], accidental) @@ -1785,7 +1793,7 @@ class StaffGroup: if self.spanbar == "no": printer.dump ("\\override SpanBar #'transparent = ##t") brack = {"brace": "SystemStartBrace", - "none": "f", + "none": "SystemStartBar", "line": "SystemStartSquare"}.get (self.symbol, None) if brack: printer.dump ("systemStartDelimiter = #'%s" % brack) @@ -1799,7 +1807,18 @@ class StaffGroup: printer.dump (m) printer.dump ("}") + def print_ly_chords (self,printer): + try: + for [staff_id, voices] in self.part_information: + for [v, lyrics, figuredbass, chordnames] in voices: + if chordnames: + printer ('\context ChordNames = "%s" \\%s' % (chordnames, chordnames)) + printer.newline () + except TypeError: + return + def print_ly (self, printer): + self.print_ly_chords (printer) if self.stafftype: printer.dump ("\\new %s" % self.stafftype) self.print_ly_overrides (printer) @@ -1840,12 +1859,6 @@ class Staff (StaffGroup): sub_staff_type = self.stafftype for [staff_id, voices] in self.part_information: - # Chord names need to come before the staff itself! - for [v, lyrics, figuredbass, chordnames] in voices: - if chordnames: - printer ('\context ChordNames = "%s" \\%s' % (chordnames, chordnames)) - - # now comes the real staff definition: if staff_id: printer ('\\context %s = "%s" << ' % (sub_staff_type, staff_id)) else: @@ -1922,6 +1935,7 @@ class Score: self.contents.set_part_information (part_id, staves_info) def print_ly (self, printer): + self.create_midi = get_create_midi () printer.dump ("\\score {"); printer.newline () if self.contents: