X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fbeam-engraver.cc;h=2ee7b317785f4012e3cf517e964cd0e61c844411;hb=7a9aad3db6fe6ee35bbcda9d9096b5d0df7ef639;hp=d9c3ff9ad38d6c8009913d1dddd1390ee315ff30;hpb=2745cbd907f8216a4cc1fc5f488ae19efdfdbd10;p=lilypond.git diff --git a/lily/beam-engraver.cc b/lily/beam-engraver.cc index d9c3ff9ad3..2ee7b31778 100644 --- a/lily/beam-engraver.cc +++ b/lily/beam-engraver.cc @@ -104,29 +104,6 @@ Beam_engraver::try_music (Music *m) beam_ = 0; } else if (m->is_mus_type ("beam-event")) - { - Direction d = to_dir (m->get_mus_property ("span-direction")); - - if (d == STOP && !valid_end_moment()) - return false; - - if (d == START && !valid_start_moment ()) - return false; - - if (d == STOP) - { - SCM m = get_property ("automaticMelismata"); - SCM b = get_property ("autoBeaming"); - if (to_boolean (m) && !to_boolean (b)) - { - set_melisma (false); - } - } - - evs_drul_[d ] = m; - return true; - } - else if (m->is_mus_type ("new-beam-event")) { Direction d = to_dir (m->get_mus_property ("span-direction")); if (d == START && !valid_start_moment ()) @@ -135,19 +112,26 @@ Beam_engraver::try_music (Music *m) return false; if (d == START) - evs_drul_[d] = m; + { + evs_drul_[d] = m; + } else if (d==STOP) - now_stop_ev_ = m; - + { + now_stop_ev_ = m; + } return true; } return false; } void -Beam_engraver::set_melisma (bool m) +Beam_engraver::set_melisma (bool ml) { - daddy_trans_->set_property ("beamMelismaBusy", m ? SCM_BOOL_T :SCM_BOOL_F); + SCM m = get_property ("automaticMelismata"); + SCM b = get_property ("autoBeaming"); + + if (to_boolean (m) && !to_boolean (b)) + daddy_trans_->set_property ("beamMelismaBusy", ml ? SCM_BOOL_T :SCM_BOOL_F); } void @@ -163,10 +147,11 @@ Beam_engraver::process_music () beam_ = 0; } - if (beam_) + if (beam_ && !to_boolean (get_property ("allowBeamBreak"))) { top_engraver ()->forbid_breaks (); } + if (evs_drul_[START]) { if (beam_) @@ -175,6 +160,7 @@ Beam_engraver::process_music () return; } + set_melisma (true); prev_start_ev_ = evs_drul_[START]; beam_ = new Spanner (get_property ("Beam")); SCM smp = get_property ("measurePosition"); @@ -215,12 +201,8 @@ Beam_engraver::start_translation_timestep () if (beam_) { - SCM m = get_property ("automaticMelismata"); - SCM b = get_property ("autoBeaming"); - if (to_boolean (m) && !to_boolean (b)) - { - set_melisma (true); - } + set_melisma (true); + subdivide_beams_ = to_boolean(get_property("subdivideBeams")); beat_length_ = *unsmob_moment (get_property ("beatLength")); } @@ -239,6 +221,7 @@ Beam_engraver::stop_translation_timestep () beam_ = 0; beam_info_ = 0; typeset_beam(); + set_melisma (false); } } @@ -322,7 +305,7 @@ 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 new-beam-event abort-event", +/* accepts */ "beam-event abort-event", /* acks */ "stem-interface rest-interface", /* reads */ "beamMelismaBusy beatLength subdivideBeams", /* write */ ""); @@ -365,8 +348,8 @@ ENTER_DESCRIPTION(Grace_beam_engraver, " are at grace points in time. " , /* creats*/ "Beam", -/* accepts */ "beam-event abort-event new-beam-event", +/* accepts */ "beam-event abort-event", /* acks */ "stem-interface rest-interface", -/* reads */ "beamMelismaBusy beatLength subdivideBeams", +/* reads */ "beamMelismaBusy beatLength allowBeamBreak subdivideBeams", /* write */ "");