X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fmusic.cc;h=351051e6a624c13684030eafe17ce824976d88e1;hb=e7aa6c445f463844dbaa52d38ea4aac2882b5601;hp=cc6281addcb326eaca53aff577580e51c5a5c48f;hpb=bb8a0a5387af94dd2702877256334b160575a730;p=lilypond.git diff --git a/lily/music.cc b/lily/music.cc index cc6281addc..351051e6a6 100644 --- a/lily/music.cc +++ b/lily/music.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2011 Han-Wen Nienhuys + Copyright (C) 1997--2014 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -161,6 +161,7 @@ Music::generic_to_relative_octave (Pitch last) if (Music *m = unsmob_music (elt)) last = m->to_relative_octave (last); + (void) music_list_to_relative (get_property ("articulations"), last, true); last = music_list_to_relative (get_property ("elements"), last, false); return last; } @@ -210,20 +211,10 @@ transpose_mutable (SCM alist, Pitch delta) if (Pitch *p = unsmob_pitch (val)) { Pitch transposed = p->transposed (delta); - if (transposed.get_alteration ().abs () > Rational (1, 1)) - { - string delta_str; - if (delta.get_alteration ().abs () > Rational (1, 1)) - delta_str = (delta.normalized ().to_string () - + " " + _ ("(normalized pitch)")); - else - delta_str = delta.to_string (); - - warning (_f ("Transposing %s by %s makes alteration larger than double", - p->to_string (), - delta_str)); - transposed = transposed.normalized (); - } + + if (prop == ly_symbol2scm ("tonic")) + transposed = Pitch (-1, transposed.get_notename (), + transposed.get_alteration ()); new_val = transposed.smobbed_copy (); } @@ -232,7 +223,8 @@ transpose_mutable (SCM alist, Pitch delta) if (Music *m = unsmob_music (val)) m->transpose (delta); } - else if (prop == ly_symbol2scm ("elements")) + else if (prop == ly_symbol2scm ("elements") + || prop == ly_symbol2scm ("articulations")) transpose_music_list (val, delta); else if (prop == ly_symbol2scm ("pitch-alist") && scm_is_pair (val)) @@ -277,7 +269,9 @@ Music::to_event () const if (!internal_is_music_type (class_name)) programming_error ("Not a music type"); - Stream_event *e = new Stream_event (class_name, mutable_property_alist_); + Stream_event *e = new Stream_event + (scm_call_1 (ly_lily_module_constant ("ly:make-event-class"), class_name), + mutable_property_alist_); Moment length = get_length (); if (length.to_bool ()) e->set_property ("length", length.smobbed_copy ()); @@ -290,8 +284,7 @@ Music::to_event () const for (; scm_is_pair (art_mus); art_mus = scm_cdr (art_mus)) { Music *m = unsmob_music (scm_car (art_mus)); - SCM ev = m ? m->to_event ()->unprotect () : scm_car (art_mus); - art_ev = scm_cons (ev, art_ev); + art_ev = scm_cons (m->to_event ()->unprotect (), art_ev); } e->set_property ("articulations", scm_reverse_x (art_ev, SCM_EOL)); }