{
if (music_context_)
{
- music_context_->event_source ()->
+ music_context_->events_below ()->
remove_listener (GET_LISTENER (set_busy), ly_symbol2scm ("rhythmic-event"));
}
music_context_ = to;
if (to)
{
- to->event_source ()->add_listener (GET_LISTENER (set_busy),
+ to->events_below ()->add_listener (GET_LISTENER (set_busy),
ly_symbol2scm ("rhythmic-event"));
}
}
? lyrics_context_->get_property ("associatedVoice")
: SCM_EOL;
SCM voice_type = lyricsto_voice_type_;
- SCM running_type = lyrics_context_
- ? lyrics_context_->get_property ("associatedVoiceType")
- : SCM_EOL;
- if (scm_is_string (running))
+ if (scm_is_string (running)) {
voice_name = running;
- if (scm_is_symbol (running_type))
- voice_type = running_type;
+ voice_type = lyrics_context_->get_property ("associatedVoiceType");
+ }
if (scm_is_string (voice_name)
&& (!music_context_ || ly_scm2string (voice_name) != music_context_->id_string ())
- && scm_is_symbol (running_type))
+ && scm_is_symbol (voice_type))
{
Context *t = get_outlet ();
while (t && t->get_parent_context ())
if (!music_found_)
{
SCM voice_name = get_music ()->get_property ("associated-context");
-
- string name;
+ SCM voice_type = get_music ()->get_property ("associated-context-type");
+ string name, type;
if (scm_is_string (voice_name))
name = ly_scm2string (voice_name);
+ type = robust_symbol2string (voice_type, "Voice");
/* Don't print a warning for empty lyrics (in which case we don't try
to find the proper voice, so it will not be found) */
if (lyrics_found_)
- get_music ()->origin ()->warning (_f ("cannot find Voice `%s'",
- name.c_str ()) + "\n");
+ get_music ()->origin ()->warning (_f ("cannot find %s `%s'",
+ type.c_str (), name.c_str ()) + "\n");
}
if (lyric_iter_)
| repeated_music
| music_bare
| LYRICSTO simple_string lyric_mode_music {
- $$ = MAKE_SYNTAX ("lyric-combine", @$, $2, $3);
+ $$ = MAKE_SYNTAX ("lyric-combine", @$, $2, SCM_EOL, $3);
+ }
+ | LYRICSTO symbol '=' simple_string lyric_mode_music
+ {
+ $$ = MAKE_SYNTAX ("lyric_combine", @$, $3, $2, $4);
}
;
'context-type ctx
'origin location)))
-(define (get-first-context-id! type mus)
- "Find the name of a ContextSpeccedMusic with given type, possibly naming it"
+(define (get-first-context-id! mus)
+ "Find the name of a ContextSpeccedMusic, possibly naming it"
(let ((id (ly:music-property mus 'context-id)))
- (if (and (eq? (ly:music-property mus 'name) 'ContextSpeccedMusic)
- (eq? (ly:music-property mus 'context-type) type))
+ (if (eq? (ly:music-property mus 'name) 'ContextSpeccedMusic)
(if (and (string? id)
(not (string-null? id)))
id
(define-ly-syntax-simple (lyric-event text duration)
(make-lyric-event text duration))
-(define (lyric-combine-music sync music loc)
+(define (lyric-combine-music sync sync-type music loc)
;; CompletizeExtenderEvent is added following the last lyric in MUSIC
;; to signal to the Extender_engraver that any pending extender should
;; be completed if the lyrics end before the associated voice.
(make-music 'LyricCombineMusic
'element music
'associated-context sync
+ 'associated-context-type sync-type
'origin loc))
-(define-ly-syntax (lyric-combine parser location voice music)
- (lyric-combine-music voice music location))
+(define-ly-syntax (lyric-combine parser location voice typ music)
+ (lyric-combine-music voice typ music location))
(define-ly-syntax (add-lyrics parser location music addlyrics-list)
- (let* ((existing-voice-name (get-first-context-id! 'Voice music))
+ (let* ((existing-voice-name (get-first-context-id! music))
(voice-name (if (string? existing-voice-name)
existing-voice-name
(get-next-unique-voice-name)))
'context-type 'Voice
'context-id voice-name
'origin (ly:music-property music 'origin))))
+ (voice-type (ly:music-property voice 'context-type))
(lyricstos (map (lambda (mus)
(let* ((loc (ly:music-property mus 'origin))
- (lyr (lyric-combine-music voice-name mus loc)))
+ (lyr (lyric-combine-music
+ voice-name voice-type mus loc)))
(make-music 'ContextSpeccedMusic
'create-new #t
'context-type 'Lyrics