+
+
+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",
+/* 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_point ();
+ virtual bool valid_end_point ();
+};
+
+Grace_beam_engraver::Grace_beam_engraver ()
+{
+}
+
+bool
+Grace_beam_engraver::valid_start_point ()
+{
+ Moment n = now_mom ();
+
+ return n.grace_part_ != Rational (0);
+}
+
+
+bool
+Grace_beam_engraver::valid_end_point ()
+{
+ return beam_ && valid_start_point ();
+}
+
+
+
+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",
+/* acks */ "stem-interface rest-interface",
+/* reads */ "beamMelismaBusy beatLength allowBeamBreak subdivideBeams",
+/* write */ "");
+