--- /dev/null
+\version "2.12.0"
+
+\header {
+ texidoc="Engravers which do not exist are simply ignored"
+}
+
+\layout { \context {
+ \name ImproVoice
+ \type "Engraver_group"
+ \consists "Rhythmic_column_engraver_foo" % "typo" here
+}
+\context { \Staff
+ \accepts "ImproVoice"
+}}
+
+\relative c'' {
+ a4 d8 bes8 \new ImproVoice { c4^"ad lib" c
+ c4 c^"undress" c_"while playing :)" c }
+ a1
+}
\ No newline at end of file
for (SCM s = trans_names; scm_is_pair (s); s = scm_cdr (s))
{
SCM definition = scm_car (s);
+ bool is_scheme = true;
Translator *type = 0;
- Translator *instance = type;
if (ly_is_symbol (definition))
{
type = get_translator (definition);
- instance = type->clone ();
+ is_scheme = false;
}
else if (ly_is_pair (definition))
{
type = get_translator (ly_symbol2scm ("Scheme_engraver"));
- instance = type->clone ();
- dynamic_cast<Scheme_engraver*> (instance)->init_from_scheme (definition);
}
else if (ly_is_procedure (definition))
{
// definition.
SCM def = scm_call_1 (definition, cs);
type = get_translator (ly_symbol2scm ("Scheme_engraver"));
- instance = type->clone ();
- dynamic_cast<Scheme_engraver*> (instance)->init_from_scheme (def);
}
if (!type)
warning (_f ("cannot find: `%s'", ly_symbol2string (scm_car (s)).c_str ()));
else
{
+ Translator *instance = type->clone ();
+ if (is_scheme)
+ dynamic_cast<Scheme_engraver*> (instance)->init_from_scheme (definition);
+
SCM str = instance->self_scm ();
if (instance->must_be_last ())