void
Context::internal_send_stream_event (SCM type, Input *origin, SCM props[])
{
- Stream_event *e = new Stream_event (type, origin);
+ Stream_event *e = new Stream_event
+ (scm_call_1 (ly_lily_module_constant ("ly:make-event-class"), type),
+ origin);
for (int i = 0; props[i]; i += 2)
{
e->set_property (props[i], props[i + 1]);
Dispatcher::dispatch (SCM sev)
{
Stream_event *ev = unsmob_stream_event (sev);
- SCM class_symbol = ev->get_property ("class");
- if (!scm_is_symbol (class_symbol))
- {
- warning (_ ("Event class should be a symbol"));
- return;
- }
-
- SCM class_list = scm_call_1 (ly_lily_module_constant ("ly:make-event-class"), class_symbol);
+ SCM class_list = ev->get_property ("class");
if (!scm_is_pair (class_list))
{
- ev->origin ()->warning (_f ("Unknown event class %s", ly_symbol2string (class_symbol).c_str ()));
+ ev->origin ()->warning (_ ("Event class should be a list"));
return;
}
+
#if 0
bool sent = false;
#endif
bool
Dispatcher::is_listened (Stream_event *ev)
{
- SCM class_symbol = ev->get_property ("class");
- if (!scm_is_symbol (class_symbol))
- {
- warning (_ ("Event class should be a symbol"));
- return false;
- }
-
- for (SCM cl = scm_call_1 (ly_lily_module_constant ("ly:make-event-class"), class_symbol);
- scm_is_pair (cl); cl = scm_cdr (cl))
+ for (SCM cl = ev->get_property ("class"); scm_is_pair (cl); cl = scm_cdr (cl))
{
SCM list = scm_hashq_ref (listeners_, scm_car (cl), SCM_EOL);
if (scm_is_pair (list))
TODO: Use symbols.
*/
- SCM start_sym = current_cresc_ev_->get_property ("class");
+ SCM start_sym = scm_car (current_cresc_ev_->get_property ("class"));
string start_type;
if (start_sym == ly_symbol2scm ("decrescendo-event"))
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 ());
New_dynamic_engraver::get_spanner_type (Stream_event *ev)
{
string type;
- SCM start_sym = ev->get_property ("class");
+ SCM start_sym = scm_car (ev->get_property ("class"));
if (start_sym == ly_symbol2scm ("decrescendo-event"))
type = "decrescendo";
void
Page_turn_engraver::listen_break (Stream_event *ev)
{
- string name = ly_symbol2string (ev->get_property ("class"));
+ string name = ly_symbol2string (scm_car (ev->get_property ("class")));
if (name == "page-turn-event")
{
for (vsize i = 0; i < break_events_.size (); i++)
{
string prefix;
- SCM name_sym = break_events_[i]->get_property ("class");
+ SCM name_sym = scm_car (break_events_[i]->get_property ("class"));
string name = ly_symbol2string (name_sym);
size_t end = name.rfind ("-event");
if (end)
void
Part_combine_engraver::create_item (Stream_event *ev)
{
- SCM what = ev->get_property ("class");
+ SCM what = scm_car (ev->get_property ("class"));
SCM text = SCM_EOL;
if (what == ly_symbol2scm ("solo-one-event"))
text = get_property ("soloText");
if (!mmrest_event_)
{
- mmrest_event_ = new Stream_event (ly_symbol2scm ("multi-measure-rest-event"));
+ mmrest_event_ = new Stream_event
+ (scm_call_1 (ly_lily_module_constant ("ly:make-event-class"),
+ ly_symbol2scm ("multi-measure-rest-event")));
mmrest_event_->set_property ("duration", SCM_EOL);
mmrest_event_->unprotect ();
}
{
if (!unisono_event_)
{
- unisono_event_ = new Stream_event (ly_symbol2scm ("unisono-event"));
+ unisono_event_ = new Stream_event
+ (scm_call_1 (ly_lily_module_constant ("ly:make-event-class"),
+ ly_symbol2scm ("unisono-event")));
unisono_event_->unprotect ();
}
{
if (!solo_one_event_)
{
- solo_one_event_ = new Stream_event (ly_symbol2scm ("solo-one-event"));
+ solo_one_event_ = new Stream_event
+ (scm_call_1 (ly_lily_module_constant ("ly:make-event-class"),
+ ly_symbol2scm ("solo-one-event")));
solo_one_event_->unprotect ();
}
{
if (!solo_two_event_)
{
- solo_two_event_ = new Stream_event (ly_symbol2scm ("solo-two-event"));
+ solo_two_event_ = new Stream_event
+ (scm_call_1 (ly_lily_module_constant ("ly:make-event-class"),
+ ly_symbol2scm ("solo-two-event")));
solo_two_event_->unprotect ();
}
Stream_event::internal_in_event_class (SCM class_name)
{
SCM cl = get_property ("class");
- cl = scm_call_1 (ly_lily_module_constant ("ly:make-event-class"), cl);
return scm_c_memq (class_name, cl) != SCM_BOOL_F;
}
(evs (map car (cdar event-list)))
(now (car now-tun))
(notes (filter (lambda (x)
- (equal? (ly:event-property x 'class) 'note-event))
+ (ly:in-event-class? x 'note-event))
evs))
(pitch (if (pair? notes)
(ly:event-property (car notes) 'pitch)
(define-public (ly:in-event-class? ev cl)
"Does event @var{ev} belong to event class @var{cl}?"
- (memq cl (ly:make-event-class (ly:event-property ev 'class))))
+ (memq cl (ly:event-property ev 'class)))
;; does this exist in guile already?
(define (map-tree f t)
;; dynamics
(define-public (hairpin::calc-grow-direction grob)
- (if (eq? (ly:event-property (event-cause grob) 'class) 'decrescendo-event)
+ (if (ly:in-event-class? (event-cause grob) 'decrescendo-event)
START
STOP))
(define-method (note-events (vs <Voice-state>))
(define (f? x)
- (equal? (ly:event-property x 'class) 'note-event))
+ (ly:in-event-class? x 'note-event))
(filter f? (events vs)))
(define-method (previous-voice-state (vs <Voice-state>))
"Analyse EVS at INDEX, given state ACTIVE."
(define (analyse-tie-start active ev)
- (if (equal? (ly:event-property ev 'class) 'tie-event)
+ (if (ly:in-event-class? ev 'tie-event)
(acons 'tie (split-index (vector-ref voice-state-vec index))
active)
active))
(define (analyse-tie-end active ev)
- (if (equal? (ly:event-property ev 'class) 'note-event)
+ (if (ly:in-event-class? ev 'note-event)
(assoc-remove! active 'tie)
active))
(define (analyse-absdyn-end active ev)
- (if (or (equal? (ly:event-property ev 'class) 'absolute-dynamic-event)
- (and (equal? (ly:event-property ev 'class) 'crescendo-event)
+ (if (or (ly:in-event-class? ev 'absolute-dynamic-event)
+ (and (ly:in-event-class? ev 'span-dynamic-event)
(equal? STOP (ly:event-property ev 'span-direction))))
(assoc-remove! (assoc-remove! active 'cresc) 'decr)
active))
(else (< (cdr a) (cdr b)))))
(define (analyse-span-event active ev)
- (let* ((name (ly:event-property ev 'class))
+ (let* ((name (car (ly:event-property ev 'class)))
(key (cond ((equal? name 'slur-event) 'slur)
((equal? name 'phrasing-slur-event) 'tie)
((equal? name 'beam-event) 'beam)
(map (lambda (art)
(let* ((num (ly:event-property art 'digit)))
- (if (and (eq? 'fingering-event (ly:event-property art 'class))
+ (if (and (ly:in-event-class? art 'fingering-event)
(number? num)
(> num 0))
(set! finger-found num))))