/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 2004--2011 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 2004--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
// 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))
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");
Quote_iterator::vector_moment (int idx) const
{
SCM entry = scm_c_vector_ref (event_vector_, idx);
- return *unsmob_moment (scm_caar (entry));
+ return *unsmob<Moment> (scm_caar (entry));
}
void
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<Pitch> (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<Pitch> (get_music ()->get_property ("quoted-transposition"));
if (!me_pitch)
- me_pitch = unsmob_pitch (get_outlet ()->get_property ("instrumentTransposition"));
+ me_pitch = unsmob<Pitch> (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");
{
SCM ev_acc = scm_car (s);
- Stream_event *ev = unsmob_stream_event (scm_car (ev_acc));
+ Stream_event *ev = unsmob<Stream_event> (scm_car (ev_acc));
if (!ev)
programming_error ("no music found in quote");
else if (accept_music_type (ev, is_cue))
if (me_pitch)
mp = *me_pitch;
- Pitch diff = pitch_interval (qp, mp);
+ Pitch diff = pitch_interval (mp, qp);
ev = ev->clone ();
-
- transpose_mutable (ev->get_property_alist (true), diff);
+ ev->make_transposable ();
+ ev->transpose (diff);
transposed_musics_ = scm_cons (ev->unprotect (), transposed_musics_);
}
- quote_outlet_.get_outlet ()->event_source ()->broadcast (ev);
+ quote_outlet_.get_context ()->event_source ()->broadcast (ev);
}
}