/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
protected:
void process_music ();
- DECLARE_ACKNOWLEDGER (stem);
- DECLARE_ACKNOWLEDGER (note_column);
- DECLARE_TRANSLATOR_LISTENER (note);
+ void acknowledge_stem (Grob_info);
+ void acknowledge_note_column (Grob_info);
+ void listen_note (Stream_event *);
void stop_translation_timestep ();
};
-Drum_notes_engraver::Drum_notes_engraver ()
+Drum_notes_engraver::Drum_notes_engraver (Context *c)
+ : Engraver (c)
{
}
-IMPLEMENT_TRANSLATOR_LISTENER (Drum_notes_engraver, note);
void
Drum_notes_engraver::listen_note (Stream_event *ev)
{
void
Drum_notes_engraver::process_music ()
{
- SCM tab = 0;
+ if (events_.empty ())
+ return;
+
+ SCM tab = get_property ("drumStyleTable");
for (vsize i = 0; i < events_.size (); i++)
{
- if (!tab)
- tab = get_property ("drumStyleTable");
-
Stream_event *ev = events_[i];
Item *note = make_item ("NoteHead", ev->self_scm ());
SCM defn = SCM_EOL;
- if (scm_hash_table_p (tab) == SCM_BOOL_T)
+ if (to_boolean (scm_hash_table_p (tab)))
defn = scm_hashq_ref (tab, drum_type, SCM_EOL);
if (scm_is_pair (defn))
SCM style = scm_car (defn);
SCM script = scm_cadr (defn);
- if (scm_integer_p (pos) == SCM_BOOL_T)
+ if (scm_is_integer (pos))
note->set_property ("staff-position", pos);
if (scm_is_symbol (style))
note->set_property ("style", style);
events_.clear ();
}
-ADD_ACKNOWLEDGER (Drum_notes_engraver, stem);
-ADD_ACKNOWLEDGER (Drum_notes_engraver, note_column);
+
+void
+Drum_notes_engraver::boot ()
+{
+ ADD_LISTENER (Drum_notes_engraver, note);
+ ADD_ACKNOWLEDGER (Drum_notes_engraver, stem);
+ ADD_ACKNOWLEDGER (Drum_notes_engraver, note_column);
+}
ADD_TRANSLATOR (Drum_notes_engraver,
/* doc */