]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/note-performer.cc
Issue 5167/6: Changes: show \markup xxx = ... \etc assignments
[lilypond.git] / lily / note-performer.cc
index a2ca6946e95a440635d3127fa5884bcd532a9ce6..44efd745742744e43afa4c7e1033503058ab9ce4 100644 (file)
@@ -37,13 +37,14 @@ protected:
 
   void listen_note (Stream_event *);
   void listen_breathing (Stream_event *);
+  void listen_tie (Stream_event *);
+  void listen_articulation (Stream_event *);
 private:
-  vector<Stream_event *> note_evs_;
+  vector<Stream_event *> note_evs_, script_evs_;
   vector<Audio_note *> notes_;
 
   vector<Audio_note *> last_notes_;
   Moment last_start_;
-
 };
 
 void
@@ -68,6 +69,10 @@ Note_performer::process_music ()
           Stream_event *tie_event = 0;
           Moment len = get_event_length (n, now_mom ());
           int velocity = 0;
+
+          for (vsize j = script_evs_.size (); j--;)
+            articulations = scm_cons (script_evs_[j]->self_scm (), articulations);
+
           for (SCM s = articulations; scm_is_pair (s); s = scm_cdr (s))
             {
               Stream_event *ev = unsmob<Stream_event> (scm_car (s));
@@ -124,6 +129,7 @@ Note_performer::stop_translation_timestep ()
 
   notes_.clear ();
   note_evs_.clear ();
+  script_evs_.clear ();
 }
 
 void
@@ -132,6 +138,18 @@ Note_performer::listen_note (Stream_event *ev)
   note_evs_.push_back (ev);
 }
 
+void
+Note_performer::listen_tie (Stream_event *ev)
+{
+  script_evs_.push_back (ev);
+}
+
+void
+Note_performer::listen_articulation (Stream_event *ev)
+{
+  script_evs_.push_back (ev);
+}
+
 void
 Note_performer::listen_breathing (Stream_event *ev)
 {
@@ -160,6 +178,8 @@ Note_performer::boot ()
 {
   ADD_LISTENER (Note_performer, note);
   ADD_LISTENER (Note_performer, breathing);
+  ADD_LISTENER (Note_performer, tie);
+  ADD_LISTENER (Note_performer, articulation);
 }
 
 ADD_TRANSLATOR (Note_performer,
@@ -176,6 +196,7 @@ ADD_TRANSLATOR (Note_performer,
                 ""
                );
 
-Note_performer::Note_performer ()
+Note_performer::Note_performer (Context *c)
+  : Performer (c)
 {
 }