#include "music-wrapper-iterator.hh"
#include "context.hh"
+#include "dispatcher.hh"
#include "input.hh"
#include "international.hh"
#include "lily-guile.hh"
DECLARE_SCHEME_CALLBACK (constructor, ());
bool quote_ok () const;
- bool accept_music_type (Music *) const;
+ bool accept_music_type (Stream_event *) const;
protected:
virtual void derived_mark () const;
}
bool
-Quote_iterator::accept_music_type (Music *mus) const
+Quote_iterator::accept_music_type (Stream_event *ev) const
{
- SCM accept = get_outlet ()->get_property ("quotedEventTypes");
- for (SCM s = mus->get_property ("types");
- scm_is_pair (s); s = scm_cdr (s))
+ for (SCM accept = get_outlet ()->get_property ("quotedEventTypes");
+ scm_is_pair (accept); accept = scm_cdr (accept))
{
- if (scm_memq (scm_car (s), accept) != SCM_BOOL_F)
+ if (ev->internal_in_event_class (scm_car (accept)))
return true;
}
-
return false;
}
{
SCM ev_acc = scm_car (s);
- Music *mus = unsmob_music (scm_car (ev_acc));
- if (!mus)
+ Stream_event *ev = unsmob_stream_event (scm_car (ev_acc));
+ if (!ev)
programming_error ("no music found in quote");
- else if (accept_music_type (mus))
+ else if (accept_music_type (ev))
{
+ /* create a transposed copy if necessary */
if (quote_pitch || me_pitch)
{
Pitch qp, mp;
Pitch diff = pitch_interval (qp, mp);
- SCM copy = ly_music_deep_copy (mus->self_scm ());
- mus = unsmob_music (copy);
-
- transposed_musics_ = scm_cons (copy, transposed_musics_);
- mus->transpose (diff);
+ SCM props = transpose_mutable (ev->get_property_alist (true), diff);
+ ev = new Stream_event (ev->get_property ("class"), props);
+ transposed_musics_ = scm_cons (ev->unprotect (), transposed_musics_);
}
-
- bool b = quote_outlet_.get_outlet ()->try_music (mus);
- if (!b)
- mus->origin ()->warning (_f ("in quotation: junking event %s",
- mus->name ()));
+ quote_outlet_.get_outlet ()->event_source ()->broadcast (ev);
}
}