- Music *m = unsmob_music (scm_car (s));
-
- if (!m)
- continue;
-
- if (m->is_mus_type ("fingering-event"))
- add_fingering (inf.grob (), m, note_ev);
- else if (m->is_mus_type ("text-script-event"))
- m->origin ()->warning (_ ("can't add text scripts to individual note heads"));
- else if (m->is_mus_type ("script-event"))
- add_script (inf.grob (), m, note_ev);
- else if (m->is_mus_type ("string-number-event"))
- add_string (inf.grob (), m, note_ev);
- else if (m->is_mus_type ("harmonic-event"))
- {
- inf.grob ()->set_property ("style", ly_symbol2scm ("harmonic"));
- Grob *d = unsmob_grob (inf.grob ()->get_object ("dot"));
- if (d)
- d->suicide ();
- }
+ Stream_event *ev = unsmob_stream_event (scm_car (s));
+
+ if (!ev)
+ continue;
+
+ if (ev->in_event_class ("fingering-event"))
+ add_fingering (inf.grob (),
+ ly_symbol2scm ("Fingering"),
+ &fingerings_,
+ ev, note_ev);
+ else if (ev->in_event_class ("text-script-event"))
+ ev->origin ()->warning (_ ("cannot add text scripts to individual note heads"));
+ else if (ev->in_event_class ("script-event"))
+ add_script (inf.grob (), ev, note_ev);
+ else if (ev->in_event_class ("string-number-event"))
+ {
+ // String numbers are used in calculating harmonics even
+ // when we don't want them displayed. So don't make space
+ // for them if 'stencil is #f
+ Grob *g = make_item ("StringNumber", ev->self_scm ());
+ if (g->get_property ("stencil") != SCM_BOOL_F)
+ add_fingering (inf.grob (),
+ ly_symbol2scm ("StringNumber"), &string_numbers_,
+ ev, note_ev);
+ g->suicide (); // Kill grob created to check stencil
+ }
+ else if (ev->in_event_class ("stroke-finger-event"))
+ add_fingering (inf.grob (),
+ ly_symbol2scm ("StrokeFinger"), &stroke_fingerings_,
+ ev, note_ev);
+ else if (ev->in_event_class ("harmonic-event"))
+ {
+ inf.grob ()->set_property ("style", ly_symbol2scm ("harmonic"));
+ Grob *d = unsmob_grob (inf.grob ()->get_object ("dot"));
+ if (d && !to_boolean (get_property ("harmonicDots")))
+ d->suicide ();
+ }