X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=lily%2Fbar-check-iterator.cc;h=baf57728d1609387c2538bcab23f4392994ffbbe;hb=e24df7c27635dc996c466295eacf2981bddccaf7;hp=5dd0266768454543ef12cafc1a70229b03db4e3b;hpb=1b9fc29140bd1d9345f784595afd22158876dfb7;p=lilypond.git diff --git a/lily/bar-check-iterator.cc b/lily/bar-check-iterator.cc index 5dd0266768..baf57728d1 100644 --- a/lily/bar-check-iterator.cc +++ b/lily/bar-check-iterator.cc @@ -4,13 +4,13 @@ source file of the GNU LilyPond music typesetter - (c) 2001--2002 Han-Wen Nienhuys + (c) 2001--2005 Han-Wen Nienhuys */ #include "simple-music-iterator.hh" -#include "request.hh" -#include "translator-group.hh" +#include "event.hh" +#include "context.hh" /* Check bar checks. We do this outside the engravers so that you can @@ -19,42 +19,54 @@ class Bar_check_iterator : Simple_music_iterator { public: - VIRTUAL_COPY_CONS(Bar_check_iterator); virtual void process (Moment); - Bar_check_iterator( ); - DECLARE_SCHEME_CALLBACK(constructor, ()); + Bar_check_iterator ( ); + DECLARE_SCHEME_CALLBACK (constructor, ()); }; -IMPLEMENT_CTOR_CALLBACK(Bar_check_iterator); -Bar_check_iterator::Bar_check_iterator() +IMPLEMENT_CTOR_CALLBACK (Bar_check_iterator); + +Bar_check_iterator::Bar_check_iterator () { } void Bar_check_iterator::process (Moment m) { - Simple_music_iterator::process(m); + Simple_music_iterator::process (m); if (!m.to_bool ()) { - Translator_group *tr = report_to (); + Context *tr = get_outlet (); SCM mp = tr->get_property ("measurePosition"); - SCM sync= tr->get_property ("barCheckSynchronize"); + SCM sync = tr->get_property ("barCheckSynchronize"); - Moment * where =unsmob_moment (mp); + Moment * where = unsmob_moment (mp); if (!where) return; if (where->main_part_) { - get_music ()->origin ()->warning (_f ("barcheck failed at: %s", - where->string ())); + bool warn = true; if (to_boolean (sync)) { - tr = tr->where_defined (ly_symbol2scm("measurePosition")); + tr = tr->where_defined (ly_symbol2scm ("measurePosition")); Moment zero; tr->set_property ("measurePosition", zero.smobbed_copy ()); } + else + { + SCM lf = tr->get_property ("barCheckLastFail"); + if (unsmob_moment (lf) + && *unsmob_moment (lf) == *where) + warn = false; + else + tr->set_property ("barCheckLastFail", mp); + } + + if (warn) + get_music ()->origin ()->warning (_f ("barcheck failed at: %s", + where->to_string ())); } } }