+
+ last_stem_added_at_ = now;
+ int durlog = unsmob_duration (ev->get_property ("duration"))->duration_log ();
+ if (durlog <= 2)
+ {
+ ev->origin ()->warning (_ ("stem doesn't fit in beam"));
+ prev_start_ev_->origin ()->warning (_ ("beam was started here"));
+ /*
+ don't return, since
+
+ [r4 c8] can just as well be modern notation.
+ */
+ }
+
+ stem->set_property ("duration-log",
+ scm_from_int (durlog));
+ Moment stem_location = now - beam_start_mom_ + beam_start_location_;
+ beam_info_->add_stem (stem_location,
+ max (durlog- 2, 0));
+ Beam::add_stem (beam_, stem);
+}
+
+ADD_ACKNOWLEDGER (Beam_engraver, stem);
+ADD_ACKNOWLEDGER (Beam_engraver, rest);
+
+ADD_TRANSLATOR (Beam_engraver,
+ /* doc */
+
+ "Handles Beam events by engraving Beams. If omitted, then notes will be "
+ "printed with flags instead of beams.",
+
+ /* create */ "Beam",
+ /* accept */ "beam-event",
+
+ /* read */
+ "beamMelismaBusy "
+ "beatLength "
+ "subdivideBeams "
+ ,
+ /* write */
+ "forbidBreak");
+
+class Grace_beam_engraver : public Beam_engraver
+{
+public:
+ TRANSLATOR_DECLARATIONS (Grace_beam_engraver);
+
+ DECLARE_TRANSLATOR_LISTENER (beam);
+
+protected:
+ virtual bool valid_start_point ();
+ virtual bool valid_end_point ();
+};
+
+Grace_beam_engraver::Grace_beam_engraver ()
+{