Context *lyrics_context_;
Context *music_context_;
SCM lyricsto_voice_name_;
+ SCM lyricsto_voice_type_;
Moment busy_moment_;
Moment pending_grace_moment_;
music_context_ = 0;
lyrics_context_ = 0;
busy_moment_.set_infinite (-1);
+ lyricsto_voice_name_ = SCM_UNDEFINED;
+ lyricsto_voice_type_ = SCM_UNDEFINED;
}
/*
scm_gc_mark (lyrics_context_->self_scm ());
if (music_context_)
scm_gc_mark (music_context_->self_scm ());
+ scm_gc_mark (lyricsto_voice_name_);
+ scm_gc_mark (lyricsto_voice_type_);
}
void
}
lyricsto_voice_name_ = get_music ()->get_property ("associated-context");
+ lyricsto_voice_type_ = get_music ()->get_property ("associated-context-type");
+ if (!scm_is_symbol (lyricsto_voice_type_))
+ lyricsto_voice_type_ = ly_symbol2scm ("Voice");
Context *voice = find_voice ();
if (voice)
SCM running = lyrics_context_
? 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))
voice_name = running;
+ if (scm_is_symbol (running_type))
+ voice_type = running_type;
if (scm_is_string (voice_name)
- && (!music_context_ || ly_scm2string (voice_name) != music_context_->id_string ()))
+ && (!music_context_ || ly_scm2string (voice_name) != music_context_->id_string ())
+ && scm_is_symbol (running_type))
{
Context *t = get_outlet ();
while (t && t->get_parent_context ())
t = t->get_parent_context ();
string name = ly_scm2string (voice_name);
- return find_context_below (t, ly_symbol2scm ("Voice"), name);
+ return find_context_below (t, voice_type, name);
}
return 0;
nm = nm.substr (0, idx);
}
+ SCM voice_type = lyrics->get_property ("associatedVoiceType");
+ if (!scm_is_symbol (voice_type))
+ return 0;
+
Context *parent = lyrics;
Context *voice = 0;
while (parent && !voice)
{
- voice = find_context_below (parent, ly_symbol2scm ("Voice"), nm);
+ voice = find_context_below (parent, voice_type, nm);
parent = parent->get_parent_context ();
}
voice = 0;
while (parent && !voice)
{
- voice = find_context_below (parent, ly_symbol2scm ("Voice"), "");
+ voice = find_context_below (parent, voice_type, "");
parent = parent->get_parent_context ();
}
drumStyleTable = #drums-style
+ associatedVoiceType = #'Voice
melismaBusyProperties = #default-melisma-properties
tieWaitForNote = ##f
clefGlyph = #"clefs.G"
(alternativeRestores ,symbol-list? "Timing variables that are
restored to their value at the end of the first alternative in
subsequent alternatives.")
- (associatedVoice ,string? "Name of the @code{Voice} that has the
+ (associatedVoice ,string? "Name of the context (see
+@code{associatedVoiceType} for its type, usually @code{Voice}) that
+has the melody for this @code{Lyrics} line.")
+ (associatedVoiceType ,symbol? "Type of the context that has the
melody for this @code{Lyrics} line.")
(autoAccidentals ,list? "List of different ways to typeset an
accidental.
TODO: Consider making type into symbol.")
(articulations ,ly:music-list?
"Articulation events specifically for this note.")
- (associated-context ,string? "Name of the Voice context associated with
+ (associated-context ,string? "Name of the context associated with
+this @code{\\lyricsto} section.")
+ (associated-context-type ,symbol? "Type of the context associated with
this @code{\\lyricsto} section.")
(augmented ,boolean? "This figure is for an augmented figured
bass (with @code{+} sign).")