-
- /* urg, copied from Beam_engraver */
- Scalar prop = get_property ("beamslopedamping", 0);
- if (prop.isnum_b ())
- beam_p->set_elt_property (damping_scm_sym, gh_int2scm(prop));
-
- prop = get_property ("autoKneeGap", 0);
- if (prop.isnum_b ())
- beam_p->set_elt_property (auto_knee_gap_scm_sym, gh_int2scm(prop));
-
- prop = get_property ("autoInterstaffKneeGap", 0);
- if (prop.isnum_b ())
- beam_p->set_elt_property (auto_interstaff_knee_gap_scm_sym, gh_int2scm( prop));
-
- prop = get_property ("beamquantisation", 0);
- if (prop.isnum_b ())
- beam_p->quantisation_ = (Beam::Quantisation)(int)prop;
-
- announce_element (Score_element_info (beam_p, 0));
- return beam_p;
+
+ announce_grob (beam, (*stems_)[0]->self_scm ());
+
+ return beam;
+}
+
+void
+Auto_beam_engraver::begin_beam ()
+{
+ if (stems_ || grouping_)
+ {
+ programming_error ("already have autobeam");
+ return;
+ }
+
+ stems_ = new Link_array<Item>;
+ grouping_ = new Beaming_info_list;
+ beam_settings_ = updated_grob_properties (context (), ly_symbol2scm ("Beam"));
+
+ beam_start_moment_ = now_mom ();
+ beam_start_location_
+ = robust_scm2moment (get_property ("measurePosition"), Moment (0));
+ subdivide_beams_ = ly_scm2bool (get_property ("subdivideBeams"));
+ beat_length_ = robust_scm2moment (get_property ("beatLength"), Moment (1, 4));
+}
+
+void
+Auto_beam_engraver::junk_beam ()
+{
+ if (!stems_)
+ return;
+
+ delete stems_;
+ stems_ = 0;
+ delete grouping_;
+ grouping_ = 0;
+ beam_settings_ = SCM_EOL;
+
+ shortest_mom_ = Moment (Rational (1, 8));