X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fquote-iterator.cc;h=885e1bd3b658ef593f0418a19b66449a881a0e77;hb=b872748c6aa8bb721ced458691b38ac2fac5dfc8;hp=69c580f5d5484fc4e0c8717144e90ffce55a95f8;hpb=2f0c6eb19208485a86d3416db3f3640a1d54752a;p=lilypond.git diff --git a/lily/quote-iterator.cc b/lily/quote-iterator.cc index 69c580f5d5..885e1bd3b6 100644 --- a/lily/quote-iterator.cc +++ b/lily/quote-iterator.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2004--2012 Han-Wen Nienhuys + Copyright (C) 2004--2015 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 @@ -71,7 +71,7 @@ Quote_iterator::accept_music_type (Stream_event *ev, bool is_cue) const // for cue notes if quotedCueEventTypes is not set) use quotedEventTypes if (is_cue) accept = get_outlet ()->get_property ("quotedCueEventTypes"); - if (accept == SCM_EOL) + if (scm_is_null (accept)) accept = get_outlet ()->get_property ("quotedEventTypes"); for (; scm_is_pair (accept); accept = scm_cdr (accept)) @@ -128,15 +128,16 @@ Quote_iterator::construct_children () SCM name = get_music ()->get_property ("quoted-context-type"); SCM id = get_music ()->get_property ("quoted-context-id"); - if (scm_is_string (id) - && scm_is_symbol (name)) + if (scm_is_symbol (name)) { - Context *cue_context = get_outlet ()->find_create_context (name, - ly_scm2string (id), SCM_EOL); + Context *cue_context = + get_outlet ()->find_create_context (name, + robust_scm2string (id, ""), + SCM_EOL); quote_outlet_.set_context (cue_context); } else - quote_outlet_.set_context (get_outlet ()); + quote_outlet_.set_context (get_outlet ()->get_default_interpreter ()); event_vector_ = get_music ()->get_property ("quoted-events"); @@ -193,7 +194,7 @@ Moment Quote_iterator::vector_moment (int idx) const { SCM entry = scm_c_vector_ref (event_vector_, idx); - return *unsmob_moment (scm_caar (entry)); + return *unsmob (scm_caar (entry)); } void @@ -234,14 +235,24 @@ Quote_iterator::process (Moment m) if (quote_ok ()) { SCM entry = scm_c_vector_ref (event_vector_, event_idx_); - Pitch *quote_pitch = unsmob_pitch (scm_cdar (entry)); + Pitch *quote_pitch = unsmob (scm_cdar (entry)); /* - The pitch that sounds like central C + The pitch that sounds when written central C is played. */ - Pitch *me_pitch = unsmob_pitch (get_music ()->get_property ("quoted-transposition")); + Pitch temp_pitch; + Pitch *me_pitch = unsmob (get_music ()->get_property ("quoted-transposition")); if (!me_pitch) - me_pitch = unsmob_pitch (get_outlet ()->get_property ("instrumentTransposition")); + me_pitch = unsmob (get_outlet ()->get_property ("instrumentTransposition")); + else + { + // We are not going to win a beauty contest with this one, + // but it is slated for replacement and touches little code. + // quoted-transposition currently has a different sign + // convention than instrumentTransposition + temp_pitch = me_pitch->negated (); + me_pitch = &temp_pitch; + } SCM cid = get_music ()->get_property ("quoted-context-id"); bool is_cue = scm_is_string (cid) && (ly_scm2string (cid) == "cue"); @@ -249,7 +260,7 @@ Quote_iterator::process (Moment m) { SCM ev_acc = scm_car (s); - Stream_event *ev = unsmob_stream_event (scm_car (ev_acc)); + Stream_event *ev = unsmob (scm_car (ev_acc)); if (!ev) programming_error ("no music found in quote"); else if (accept_music_type (ev, is_cue)) @@ -263,11 +274,10 @@ Quote_iterator::process (Moment m) if (me_pitch) mp = *me_pitch; - Pitch diff = pitch_interval (qp, mp); + Pitch diff = pitch_interval (mp, qp); ev = ev->clone (); ev->make_transposable (); - - transpose_mutable (ev->get_property_alist (true), diff); + ev->transpose (diff); transposed_musics_ = scm_cons (ev->unprotect (), transposed_musics_); } quote_outlet_.get_context ()->event_source ()->broadcast (ev);