- ADDLYRICS Music Music {
- Music *l = MY_MAKE_MUSIC ("LyricCombineMusic");
- l->set_property ("elements", scm_listify ($2->self_scm (), $3->self_scm (), SCM_UNDEFINED));
- scm_gc_unprotect_object ($3->self_scm ());
- scm_gc_unprotect_object ($2->self_scm ());
- $$ = l;
+ Grouped_music_list new_lyrics {
+ Music * voice = $1;
+ SCM name = get_first_context_id (scm_makfrom0str ("Voice"), voice);
+ if (!scm_is_string (name))
+ {
+ name = get_next_unique_lyrics_context_id ();
+ voice = context_spec_music (scm_makfrom0str ("Voice"),
+ name,
+ voice, SCM_EOL);
+ }
+
+ SCM context = scm_makfrom0str ("Lyrics");
+ Music *all = MY_MAKE_MUSIC ("SimultaneousMusic");
+
+ SCM lst = SCM_EOL;
+ for (SCM s = $2; scm_is_pair (s); s = scm_cdr (s))
+ {
+ Music *music = unsmob_music (scm_car (s));
+ Music *com = make_lyric_combine_music (name, music);
+ Music *csm = context_spec_music (context,
+ get_next_unique_context_id (), com, SCM_EOL);
+ lst = scm_cons (csm->self_scm (), lst);
+ }
+ all->set_property ("elements", scm_cons (voice->self_scm (),
+ lst));
+ $$ = all;
+ scm_gc_unprotect_object (voice->self_scm ());