#include "duration.hh"
#include "context.hh"
-/*
- TODO: documentme.
- */
class Auto_beam_engraver : public Engraver
{
TRANSLATOR_DECLARATIONS (Auto_beam_engraver);
void
Auto_beam_engraver::process_music ()
{
- if (ly_c_string_p (get_property ("whichBar")))
+ if (scm_is_string (get_property ("whichBar")))
{
consider_end (shortest_mom_);
junk_beam ();
function = scm_list_n (ly_symbol2scm ("begin"), SCM_UNDEFINED);
else
function = scm_list_n (ly_symbol2scm ("end"), SCM_UNDEFINED);
-
- Moment one_beat = *unsmob_moment (get_property ("beatLength"));
- int num = int ((*unsmob_moment (get_property ("measureLength")) / one_beat).main_part_);
- int den = one_beat.den ();
+
+ Moment beat_length (1,4);
+ if (Moment * m = unsmob_moment (get_property ("beatLength")))
+ {
+ beat_length = *m;
+ }
+ Moment measure_length (1,1);
+ int num = 4;
+ if (Moment* m = unsmob_moment (get_property ("measureLength")))
+ {
+ num = int ((*m / beat_length).main_part_);
+ }
+
+ int den = beat_length.den ();
SCM time = scm_list_n (scm_int2num (num), scm_int2num (den), SCM_UNDEFINED);
SCM type = scm_list_n (scm_int2num (test_mom.num ()),
/* end beam at end of beat */
if (dir == STOP)
{
- SCM beat (get_property ("beatLength"));
-
- if (unsmob_moment (beat))
- moment = *unsmob_moment (beat);
+ moment = robust_scm2moment (get_property ("beatLength"), moment);
}
/* second guess: property generic time exception */
SCM m = scm_assoc (ly_append3 (function, wild, time), settings);
- if (m != SCM_BOOL_F && unsmob_moment (ly_cdr (m)))
- moment = * unsmob_moment (ly_cdr (m));
+ if (m != SCM_BOOL_F && unsmob_moment (scm_cdr (m)))
+ moment = * unsmob_moment (scm_cdr (m));
/* third guess: property time exception, specific for duration type */
m = scm_assoc (ly_append3 (function, type, time), settings);
- if (m != SCM_BOOL_F && unsmob_moment (ly_cdr (m)))
- moment = * unsmob_moment (ly_cdr (m));
+ if (m != SCM_BOOL_F && unsmob_moment (scm_cdr (m)))
+ moment = * unsmob_moment (scm_cdr (m));
/* fourth guess [user override]: property plain generic */
m = scm_assoc (ly_append3 (function, wild, wild), settings);
- if (m != SCM_BOOL_F && unsmob_moment (ly_cdr (m)))
- moment = * unsmob_moment (ly_cdr (m));
+ if (m != SCM_BOOL_F && unsmob_moment (scm_cdr (m)))
+ moment = * unsmob_moment (scm_cdr (m));
/* fifth guess [user override]: property plain, specific for duration type */
m = scm_assoc (ly_append3 (function, type, wild), settings);
- if (m != SCM_BOOL_F && unsmob_moment (ly_cdr (m)))
- moment = * unsmob_moment (ly_cdr (m));
+ if (m != SCM_BOOL_F && unsmob_moment (scm_cdr (m)))
+ moment = * unsmob_moment (scm_cdr (m));
Rational r;
if (moment.to_bool ())
We may have to fix this elsewhere (timing translator)
r = unsmob_moment (get_property ("measurePosition"))->mod_rat (moment);
*/
- Moment pos = * unsmob_moment (get_property ("measurePosition"));
+ Moment pos (0);
+ if (Moment *m = unsmob_moment (get_property ("measurePosition")))
+ {
+ pos = *m;
+ }
+
if (pos < Moment (0))
{
- Moment length = * unsmob_moment (get_property ("measureLength"));
+ Moment length(1);
+
+ if ( Moment *m = unsmob_moment (get_property ("measureLength")))
+ {
+ length = *m;
+ }
pos = length - pos;
}
r = pos.main_part_.mod_rat (moment.main_part_);
beam_settings_ = updated_grob_properties (context (), ly_symbol2scm ("Beam"));
beam_start_moment_ = now_mom ();
- beam_start_location_ = *unsmob_moment (get_property ("measurePosition"));
+ beam_start_location_ =
+ robust_scm2moment (get_property ("measurePosition"), Moment(0));
subdivide_beams_ = ly_scm2bool (get_property ("subdivideBeams"));
- beat_length_ = *unsmob_moment (get_property ("beatLength"));
+ beat_length_ = robust_scm2moment (get_property ("beatLength"), Moment(1,4));
}
void