]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/lyric-engraver.cc
(process_acknowledged): don't create
[lilypond.git] / lily / lyric-engraver.cc
index 484167c109a4c792166c3c8bb3e76e69ceccd300..e11f4ec222156d18672805fa1338aabbf36d97c6 100644 (file)
@@ -14,6 +14,9 @@
 #include "multi-measure-rest.hh"
 #include "note-head.hh"
 #include "rest.hh"
+#include "stream-event.hh"
+
+#include "translator.icc"
 
 /**
    Generate texts for lyric syllables.  We only do one lyric at a time.
@@ -23,14 +26,14 @@ class Lyric_engraver : public Engraver
 {
 protected:
   void stop_translation_timestep ();
-  virtual bool try_music (Music *);
   void process_music ();
+  DECLARE_TRANSLATOR_LISTENER (lyric);
 
 public:
   TRANSLATOR_DECLARATIONS (Lyric_engraver);
 
 private:
-  Music *event_;
+  Stream_event *event_;
   Item *text_;
   Item *last_text_;
 
@@ -44,15 +47,11 @@ Lyric_engraver::Lyric_engraver ()
   event_ = 0;
 }
 
-bool
-Lyric_engraver::try_music (Music *r)
+IMPLEMENT_TRANSLATOR_LISTENER (Lyric_engraver, lyric);
+void
+Lyric_engraver::listen_lyric (Stream_event *ev)
 {
-  if (!event_)
-    {
-      event_ = r;
-      return true;
-    }
-  return false;
+  ASSIGN_EVENT_ONCE (event_, ev);
 }
 
 void
@@ -83,15 +82,15 @@ get_voice_to_lyrics (Context *lyrics)
     return c;
 
   SCM voice_name = lyrics->get_property ("associatedVoice");
-  String nm = lyrics->id_string ();
+  string nm = lyrics->id_string ();
 
   if (scm_is_string (voice_name))
     nm = ly_scm2string (voice_name);
   else
     {
-      int idx = nm.index_last ('-');
+      ssize idx = nm.rfind ('-');
       if (idx != NPOS)
-       nm = nm.left_string (idx);
+       nm = nm.substr (0, idx);
     }
 
   Context *parent = lyrics;
@@ -157,8 +156,6 @@ Lyric_engraver::stop_translation_timestep ()
   event_ = 0;
 }
 
-#include "translator.icc"
-
 ADD_TRANSLATOR (Lyric_engraver,
                /* doc */ "",
                /* create */ "LyricText",