X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fauto-beam-engraver.cc;h=9f5e53da69fa27b3dfa465fcc17cff9ef45c8c7f;hb=ade2bb7da653fbd9d670590afd67376fe69c59dd;hp=0472c4cdec07dc9b31436cb0ceef7f3437ffb283;hpb=abbdb46061be5c0a0682059d1f86bf3e44ca5cf3;p=lilypond.git diff --git a/lily/auto-beam-engraver.cc b/lily/auto-beam-engraver.cc index 0472c4cdec..9f5e53da69 100644 --- a/lily/auto-beam-engraver.cc +++ b/lily/auto-beam-engraver.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1999--2006 Jan Nieuwenhuizen + (c) 1999--2007 Jan Nieuwenhuizen */ #include "bar-line.hh" @@ -68,15 +68,17 @@ private: Moment beam_start_moment_; Moment beam_start_location_; - bool subdivide_beams_; - Moment beat_length_; - // We act as if beam were created, and start a grouping anyway. Beaming_pattern *grouping_; SCM beam_settings_; Beaming_pattern *finished_grouping_; + + Beaming_options beaming_options_; + Beaming_options finished_beaming_options_; + + void check_bar_property (); }; @@ -183,11 +185,10 @@ Auto_beam_engraver::create_beam () return 0; /* - Can't use make_spanner_from_properties() because we have to use + Can't use make_spanner_from_properties () because we have to use beam_settings_. */ - Spanner *beam = new Spanner (beam_settings_, - context ()->get_grob_key ("Beam")); + Spanner *beam = new Spanner (beam_settings_); for (vsize i = 0; i < stems_->size (); i++) Beam::add_stem (beam, (*stems_)[i]); @@ -208,6 +209,7 @@ Auto_beam_engraver::begin_beam () stems_ = new vector; grouping_ = new Beaming_pattern (); + beaming_options_.from_context (context ()); beam_settings_ = updated_grob_properties (context (), ly_symbol2scm ("Beam")); beam_start_moment_ = now_mom (); @@ -238,8 +240,13 @@ Auto_beam_engraver::end_beam () else { finished_beam_ = create_beam (); + if (finished_beam_) - finished_grouping_ = grouping_; + { + announce_end_grob (finished_beam_, SCM_EOL); + finished_grouping_ = grouping_; + finished_beaming_options_ = beaming_options_; + } delete stems_; stems_ = 0; grouping_ = 0; @@ -257,7 +264,7 @@ Auto_beam_engraver::typeset_beam () if (!finished_beam_->get_bound (RIGHT)) finished_beam_->set_bound (RIGHT, finished_beam_->get_bound (LEFT)); - finished_grouping_->beamify (context ()); + finished_grouping_->beamify (finished_beaming_options_); Beam::set_beaming (finished_beam_, finished_grouping_); finished_beam_ = 0; @@ -427,6 +434,11 @@ ADD_TRANSLATOR (Auto_beam_engraver, "@ref{Stem_engraver} properties @code{stemLeftBeamCount} and " "@code{stemRightBeamCount}. ", /* create */ "Beam", - /* accept */ "beam-forbid-event", - /* read */ "autoBeaming autoBeamSettings beatLength subdivideBeams", + + /* read */ + "autoBeaming " + "autoBeamSettings " + "beatLength " + "subdivideBeams ", + /* write */ "");