source file of the GNU LilyPond music typesetter
- (c) 2000--2005 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
*/
+#include "math.h" // ceil
+
#include "beam.hh"
+#include "chord-tremolo-iterator.hh"
+#include "engraver-group.hh"
+#include "international.hh"
+#include "item.hh"
+#include "misc.hh"
#include "repeated-music.hh"
-#include "stem.hh"
#include "rhythmic-head.hh"
-#include "engraver-group-engraver.hh"
-#include "warn.hh"
-#include "misc.hh"
-#include "note-head.hh"
#include "spanner.hh"
-#include "item.hh"
-#include "chord-tremolo-iterator.hh"
#include "stem-tremolo.hh"
-#include "math.h" // ceil
+#include "stem.hh"
+#include "warn.hh"
+
+#include "translator.icc"
/**
protected:
virtual void finalize ();
virtual bool try_music (Music *);
- virtual void acknowledge_grob (Grob_info);
- virtual void stop_translation_timestep ();
- virtual void start_translation_timestep ();
- virtual void process_music ();
+ void stop_translation_timestep ();
+ void start_translation_timestep ();
+ void process_music ();
+ DECLARE_ACKNOWLEDGER (stem);
};
Chord_tremolo_engraver::Chord_tremolo_engraver ()
int elt_count = body_is_sequential_ ? scm_ilength (body->get_property ("elements")) : 1;
if (body_is_sequential_ && elt_count != 2)
- {
- m->origin ()->warning (_f ("expect 2 elements for chord tremolo, found %d", elt_count));
- }
+ m->origin ()->warning (_f ("expect 2 elements for chord tremolo, found %d", elt_count));
if (elt_count <= 0)
elt_count = 1;
}
void
-Chord_tremolo_engraver::acknowledge_grob (Grob_info info)
+Chord_tremolo_engraver::acknowledge_stem (Grob_info info)
{
- if (beam_ && Stem::has_interface (info.grob ()))
+ if (beam_)
{
Grob *s = info.grob ();
Stem::set_beaming (s, flags_, LEFT);
if (Stem::duration_log (s) != 1)
- {
- beam_->set_property ("gap-count", scm_int2num (flags_ - total_duration_flags_));
- }
+ beam_->set_property ("gap-count", scm_from_int (flags_ - total_duration_flags_));
- if (info.music_cause ()->is_mus_type ("rhythmic-event"))
- {
- Beam::add_stem (beam_, s);
- }
+ if (info.ultimate_music_cause ()->is_mus_type ("rhythmic-event"))
+ Beam::add_stem (beam_, s);
else
{
- String s = _ ("stem must have Rhythmic structure");
+ string s = _ ("stem must have Rhythmic structure");
if (info.music_cause ())
info.music_cause ()->origin ()->warning (s);
else
}
}
else if (repeat_
- && flags_ && !body_is_sequential_ && Stem::has_interface (info.grob ()))
+ && flags_
+ && !body_is_sequential_)
{
stem_tremolo_ = make_item ("StemTremolo", repeat_->self_scm ());
stem_tremolo_->set_property ("flag-count",
- scm_int2num (flags_));
- stem_tremolo_->set_property ("stem",
- info.grob ()->self_scm ());
+ scm_from_int (flags_));
+ stem_tremolo_->set_object ("stem",
+ info.grob ()->self_scm ());
stem_tremolo_->set_parent (info.grob (), X_AXIS);
+ info.grob ()->set_object ("tremolo-flag", stem_tremolo_->self_scm ());
}
}
typeset_beam ();
}
+ADD_ACKNOWLEDGER (Chord_tremolo_engraver, stem);
ADD_TRANSLATOR (Chord_tremolo_engraver,
- /* descr */ "Generates beams for tremolo repeats.",
- /* creats*/ "Beam",
- /* accepts */ "repeated-music",
- /* acks */ "stem-interface note-head-interface",
- /* reads */ "",
+ /* doc */ "Generates beams for tremolo repeats.",
+ /* create */ "Beam",
+ /* accept */ "repeated-music",
+ /* read */ "",
/* write */ "");