X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fcontext.cc;h=b2ada8fe7f19d3d71c1a565344e6ec3603e60f22;hb=26579f31a64ede25cabf36d1d3fab8f16e25cd16;hp=dc6216403fe3caaf42aaf8f1dac54272627293d5;hpb=fb56252985ed1037637874f1b22f3d84b238a619;p=lilypond.git diff --git a/lily/context.cc b/lily/context.cc index dc6216403f..b2ada8fe7f 100644 --- a/lily/context.cc +++ b/lily/context.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 2004--2007 Han-Wen Nienhuys + (c) 2004--2009 Han-Wen Nienhuys */ #include "context.hh" @@ -46,9 +46,8 @@ Context::check_removal () } } -Context::Context (Context const &src) +Context::Context (Context const & /* src */) { - (void) src; assert (false); } @@ -162,9 +161,6 @@ Context::find_create_context (SCM n, string id, SCM operations) return tg; } - /* - TODO: use accepts_list_. - */ vector path = path_to_acceptable_context (n); if (path.size ()) @@ -309,8 +305,8 @@ Context::create_context_from_event (SCM sev) vector Context::path_to_acceptable_context (SCM name) const { - // definition_mods_ is a list of (symbol string), but the Context_def expects - // to see a list of (symbol symbol). + // The 'accepts elements in definition_mods_ is a list of ('accepts string), + // but the Context_def expects to see elements of the form ('accepts symbol). SCM accepts = SCM_EOL; for (SCM s = scm_reverse (definition_mods_); scm_is_pair (s); s = scm_cdr (s)) if (scm_caar (s) == ly_symbol2scm ("accepts")) @@ -712,6 +708,35 @@ measure_position (Context const *context) return m; } +/* Finds the measure position after a note of length DUR that + begins at the current measure position. */ +Moment +measure_position (Context const *context, Duration const *dur) +{ + Moment pos = measure_position (context); + Rational dur_length = dur ? dur->get_length () : Rational (0); + + Moment end_pos = pos.grace_part_ < Rational(0) + ? Moment(pos.main_part_, pos.grace_part_ + dur_length) + : Moment(pos.main_part_ + dur_length, 0); + + return end_pos; +} + +int +measure_number (Context const *context) +{ + SCM barnum = context->get_property ("internalBarNumber"); + SCM smp = context->get_property ("measurePosition"); + + int bn = robust_scm2int (barnum, 0); + Moment mp = robust_scm2moment (smp, Moment (0)); + if (mp.main_part_ < Rational (0)) + bn--; + + return bn; +} + void set_context_property_on_children (Context *trans, SCM sym, SCM val)