X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fauto-beam-engraver.cc;h=42e3935d8de364475545a473d8ad6fff3931cadb;hb=01378c85f23e4bdbc07cd1f3b06ddfd573377bb9;hp=9435bc82d5eb48b5d8a4c52fabb4e16dd22d88c2;hpb=487ee28c2a58e7bd5cb9e85c7676057c0b32f385;p=lilypond.git diff --git a/lily/auto-beam-engraver.cc b/lily/auto-beam-engraver.cc index 9435bc82d5..42e3935d8d 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--2002 Jan Nieuwenhuizen + (c) 1999--2003 Jan Nieuwenhuizen */ @@ -31,6 +31,7 @@ class Auto_beam_engraver : public Engraver protected: virtual void stop_translation_timestep (); virtual void start_translation_timestep (); + virtual void process_music (); virtual void finalize (); virtual void acknowledge_grob (Grob_info); virtual void process_acknowledged_grobs (); @@ -73,6 +74,15 @@ private: Beaming_info_list*finished_grouping_; }; +void +Auto_beam_engraver::process_music () +{ + if (gh_string_p (get_property ("whichBar"))) + { + consider_end (shortest_mom_); + junk_beam (); + } +} Auto_beam_engraver::Auto_beam_engraver () @@ -153,23 +163,23 @@ Auto_beam_engraver::test_moment (Direction dir, Moment test_mom) } /* second guess: property generic time exception */ - SCM m = gh_assoc (gh_append3 (function, wild, time), settings); + SCM m = scm_assoc (gh_append3 (function, wild, time), settings); if (m != SCM_BOOL_F && unsmob_moment (ly_cdr (m))) moment = * unsmob_moment (ly_cdr (m)); /* third guess: property time exception, specific for duration type */ - m = gh_assoc (gh_append3 (function, type, time), settings); + m = scm_assoc (gh_append3 (function, type, time), settings); if (m != SCM_BOOL_F && unsmob_moment (ly_cdr (m))) moment = * unsmob_moment (ly_cdr (m)); /* fourth guess [user override]: property plain generic */ - m = gh_assoc (gh_append3 (function, wild, wild), settings); + m = scm_assoc (gh_append3 (function, wild, wild), settings); if (m != SCM_BOOL_F && unsmob_moment (ly_cdr (m))) moment = * unsmob_moment (ly_cdr (m)); /* fifth guess [user override]: property plain, specific for duration type */ - m = gh_assoc (gh_append3 (function, type, wild), settings); + m = scm_assoc (gh_append3 (function, type, wild), settings); if (m != SCM_BOOL_F && unsmob_moment (ly_cdr (m))) moment = * unsmob_moment (ly_cdr (m)); @@ -256,9 +266,13 @@ Auto_beam_engraver::create_beam () void Auto_beam_engraver::begin_beam () { - assert (!stems_); + if (stems_ || grouping_ ) + { + programming_error ("already have autobeam"); + return; + } + stems_ = new Link_array; - assert (!grouping_); grouping_ = new Beaming_info_list; beam_settings_ = get_property ("Beam"); @@ -268,11 +282,11 @@ Auto_beam_engraver::begin_beam () beat_length_ = *unsmob_moment (get_property ("beatLength")); } - void Auto_beam_engraver::junk_beam () { - assert (stems_); + if (!stems_) + return ; delete stems_; stems_ = 0; @@ -291,7 +305,6 @@ Auto_beam_engraver::end_beam () junk_beam (); } else - { finished_beam_ = create_beam (); if (finished_beam_) @@ -481,21 +494,17 @@ Auto_beam_engraver::process_acknowledged_grobs () } } } - - /* - count_++ -> - - auto-beam-engraver.cc:459: warning: value computed is not used (gcc: 2.96) */ - count_ = count_ + 1; + + count_ ++; } ENTER_DESCRIPTION (Auto_beam_engraver, -/* descr */ "Generate beams based on measure characteristics and observed -Stems. Uses beatLength, measureLength and measurePosition to decide -when to start and stop a beam. Overriding beaming is done through -@ref{Stem_engraver} properties stemLeftBeamCount and -stemRightBeamCount. -", +/* descr */ "Generate beams based on measure characteristics and observed " +"Stems. Uses beatLength, measureLength and measurePosition to decide " +"when to start and stop a beam. Overriding beaming is done through " +"@ref{Stem_engraver} properties stemLeftBeamCount and " +"stemRightBeamCount. " +, /* creats*/ "Beam", /* accepts */ "", /* acks */ "stem-interface rest-interface beam-interface bar-line-interface",