X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Flyric-engraver.cc;h=3005760765b00c0cb5f4febb34fe1d1ba679df86;hb=d194ee9f637a200ac26b59e818acf5ca37985dc9;hp=176c9b7166157228e5eb82571d6685a5236bd671;hpb=31568c504806f35aac420a394c9eab07abd9faa7;p=lilypond.git diff --git a/lily/lyric-engraver.cc b/lily/lyric-engraver.cc index 176c9b7166..3005760765 100644 --- a/lily/lyric-engraver.cc +++ b/lily/lyric-engraver.cc @@ -9,11 +9,12 @@ #include "context.hh" #include "engraver.hh" -#include "font-metric.hh" #include "item.hh" -#include "multi-measure-rest.hh" #include "note-head.hh" -#include "rest.hh" +#include "stream-event.hh" +#include "international.hh" + +#include "translator.icc" /** Generate texts for lyric syllables. We only do one lyric at a time. @@ -23,14 +24,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 +45,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 @@ -62,7 +59,7 @@ Lyric_engraver::process_music () { SCM text = event_->get_property ("text"); - if (ly_is_equal (text, scm_makfrom0str (" "))) + if (ly_is_equal (text, scm_from_locale_string (" "))) { if (last_text_) last_text_->set_property ("self-alignment-X", scm_from_int (LEFT)); @@ -70,7 +67,6 @@ Lyric_engraver::process_music () else { text_ = make_item ("LyricText", event_->self_scm ()); - text_->set_property ("text", text); } } } @@ -149,6 +145,11 @@ Lyric_engraver::stop_translation_timestep () if (melisma_busy (voice)) text_->set_property ("self-alignment-X", scm_from_int (LEFT)); } + else + { + text_->warning (_ ("Lyric syllable does not have note. Use \\lyricsto or associatedVoice.")); + text_->set_property ("X-offset", scm_from_int (0)); + } } last_text_ = text_; @@ -157,11 +158,8 @@ Lyric_engraver::stop_translation_timestep () event_ = 0; } -#include "translator.icc" - ADD_TRANSLATOR (Lyric_engraver, /* doc */ "", /* create */ "LyricText", - /* accept */ "lyric-event", /* read */ "", /* write */ "");