]> git.donarmstrong.com Git - lilypond.git/commitdiff
Change class field in stream events to contain the complete event type list
authorDavid Kastrup <dak@gnu.org>
Mon, 16 Apr 2012 15:23:23 +0000 (17:23 +0200)
committerDavid Kastrup <dak@gnu.org>
Wed, 2 May 2012 02:31:13 +0000 (04:31 +0200)
15 files changed:
lily/context.cc
lily/dispatcher.cc
lily/dynamic-engraver.cc
lily/music.cc
lily/new-dynamic-engraver.cc
lily/page-turn-engraver.cc
lily/paper-column-engraver.cc
lily/part-combine-engraver.cc
lily/part-combine-iterator.cc
lily/stream-event.cc
scm/autochange.scm
scm/define-event-classes.scm
scm/output-lib.scm
scm/part-combiner.scm
scm/translation-functions.scm

index 34b75523ea38d3e1e2f76c68bf606c55c7e02ee7..0551b3b702701ce56da8e74f77bd84895b239799 100644 (file)
@@ -452,7 +452,9 @@ be called from any other place than the send_stream_event macro.
 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]);
index 4db7c93a1555a66a9cffc6772ea9ac349a263379..f54606436866771482754dd0ef6b04030b575038 100644 (file)
@@ -77,19 +77,13 @@ void
 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
@@ -176,15 +170,7 @@ Dispatcher::dispatch (SCM sev)
 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))
index a3cb7795212c98da8bdd25a68c13e826064f5a82..c492e59c5540809829324fbf50bdcb6ad8f4ba88 100644 (file)
@@ -215,7 +215,7 @@ Dynamic_engraver::process_music ()
             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"))
index 7927fe3067cc8b855743e6e5c5ad06ae5c1b18a9..e96e83d59fa14016a3afc10b14c5b63fbcc7dd6e 100644 (file)
@@ -279,7 +279,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 ());
index 1388235b1bcbec277bb50214f183165966a24038..749f9aaa164c496b4c9267df920f13db75ba9cdc 100644 (file)
@@ -242,7 +242,7 @@ string
 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";
index b18531cc1a13623a28a6ecd2a12d884e01aac11e..d7c7ccec3258a19940c6bb92eb1fdddeda525efb 100644 (file)
@@ -172,7 +172,7 @@ IMPLEMENT_TRANSLATOR_LISTENER (Page_turn_engraver, break);
 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")
     {
index de550aeb73738779a9ef64285e26ac903f1ee41c..8ff894d8facbc9f402af3d33d2834125d95d97d6 100644 (file)
@@ -162,7 +162,7 @@ Paper_column_engraver::handle_manual_breaks (bool only_do_permissions)
   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)
index 36d91f9ddfe0683a0f58a85632850874fe9dbc82..6d11c155f8dcab531f3325f1dbad67f26a2fb91a 100644 (file)
@@ -79,7 +79,7 @@ Part_combine_engraver::Part_combine_engraver ()
 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");
index db6b77cbc614f1b7146aa5b925e1eea9d2cde0a8..e7bece69cb325579d49407b4b8d0992066b024bc 100644 (file)
@@ -223,7 +223,9 @@ Part_combine_iterator::kill_mmrest (int in)
 
   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 ();
     }
@@ -256,7 +258,9 @@ Part_combine_iterator::unisono (bool silent)
         {
           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 ();
             }
 
@@ -286,7 +290,9 @@ Part_combine_iterator::solo1 ()
         {
           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 ();
             }
 
@@ -311,7 +317,9 @@ Part_combine_iterator::solo2 ()
         {
           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 ();
             }
 
index ef801efc621d7c3b9befefcceade4795e23a5bcd..5ce03ec08d0d21883b0e3249eea1685326fdcbc9 100644 (file)
@@ -69,7 +69,6 @@ bool
 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;
 }
 
index 54f5e96250ce90e376a9113856ac28f419e1a3b2..14252e4b1db607a22c3df8fb1f6306a1e2b12742 100644 (file)
@@ -11,7 +11,7 @@
               (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)
index fee440ad508f1924691f15d7e2e1e18e6eb20c78..771513f5b4f9815fe94096edd20d2c0111115645 100644 (file)
@@ -96,7 +96,7 @@
 
 (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)
index bb8f4ddf50d96c80bdece61ebb473d1d36604396..95fefbdb3a856eba58842d315401551f1d6ab77f 100644 (file)
@@ -900,7 +900,7 @@ and duration-log @var{log}."
 ;; 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))
 
index 88c0b88fa6be7d94d61f6d8f40c946176c449309..7deeeeb4815615f4ffb5e9ff48b1dcda321a716a 100644 (file)
@@ -41,7 +41,7 @@
 
 (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>))
@@ -130,19 +130,19 @@ Voice-state objects
     "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))
@@ -153,7 +153,7 @@ Voice-state objects
            (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)
index a535497962c07b9ae8ca5d79d1faf3901d1b7e10..2dd8d2d92c8ac06aa1beee75fa124b32351eff4f 100644 (file)
@@ -300,7 +300,7 @@ if no fingering is present."
        (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))))