+
+
+ENTER_DESCRIPTION(Beam_engraver,
+/* descr */ "Handles Beam events by engraving Beams. If omitted, then notes will be "
+"printed with flags instead of beams.",
+/* creats*/ "Beam",
+/* accepts */ "beam-event abort-event",
+/* acks */ "stem-interface rest-interface",
+/* reads */ "beamMelismaBusy beatLength subdivideBeams",
+/* write */ "");
+
+
+class Grace_beam_engraver : public Beam_engraver
+{
+public:
+ TRANSLATOR_DECLARATIONS(Grace_beam_engraver);
+
+protected:
+ virtual bool valid_start_moment();
+ virtual bool valid_end_moment ();
+};
+
+Grace_beam_engraver::Grace_beam_engraver()
+{
+}
+
+bool
+Grace_beam_engraver::valid_start_moment()
+{
+ Moment n = now_mom ();
+
+ return n.grace_part_ != Rational (0);
+}
+
+
+bool
+Grace_beam_engraver::valid_end_moment ()
+{
+ return beam_ && last_stem_added_at_.grace_part_ != Rational(0);
+}
+
+
+
+ENTER_DESCRIPTION(Grace_beam_engraver,
+/* descr */ "Handles Beam events by engraving Beams. If omitted, then notes will "
+"be printed with flags instead of beams. Only engraves beams when we "
+" are at grace points in time. "
+,
+/* creats*/ "Beam",
+/* accepts */ "beam-event abort-event",
+/* acks */ "stem-interface rest-interface",
+/* reads */ "beamMelismaBusy beatLength allowBeamBreak subdivideBeams",
+/* write */ "");