source file of the GNU LilyPond music typesetter
- (c) 1999--2002 Jan Nieuwenhuizen <janneke@gnu.org>
+ (c) 1999--2004 Jan Nieuwenhuizen <janneke@gnu.org>
*/
#include "beaming.hh"
-#include "musical-request.hh"
+#include "event.hh"
#include "beam.hh"
#include "stem.hh"
#include "warn.hh"
#include "engraver.hh"
#include "item.hh"
#include "spanner.hh"
+#include "duration.hh"
/*
TODO: figure what to do in grace?
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 ();
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 ()
}
/* 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));
void
Auto_beam_engraver::begin_beam ()
{
- assert (!stems_);
+ if (stems_ || grouping_ )
+ {
+ programming_error ("already have autobeam");
+ return;
+ }
+
stems_ = new Link_array<Item>;
- assert (!grouping_);
grouping_ = new Beaming_info_list;
beam_settings_ = get_property ("Beam");
beat_length_ = *unsmob_moment (get_property ("beatLength"));
}
-
void
Auto_beam_engraver::junk_beam ()
{
- assert (stems_);
+ if (!stems_)
+ return ;
delete stems_;
stems_ = 0;
junk_beam ();
}
else
-
{
finished_beam_ = create_beam ();
if (finished_beam_)
return ;
- Moment dur = unsmob_duration (m->get_mus_property ("duration"))->length_mom ();
+ Moment dur = unsmob_duration (m->get_mus_property ("duration"))->get_length ();
/* FIXME:
This comment has been here since long:
durlog - 2);
stems_->push (stem);
last_add_mom_ = now;
- extend_mom_ = (extend_mom_ >? now) + m->length_mom ();
+ extend_mom_ = (extend_mom_ >? now) + m->get_length ();
}
}
}
}
}
-
- /*
- 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 */ "general-music",
+/* accepts */ "",
/* acks */ "stem-interface rest-interface beam-interface bar-line-interface",
/* reads */ "autoBeaming autoBeamSettings beatLength subdivideBeams",
/* write */ "");