X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fscore-engraver.cc;h=ba80e75bb6ac6052cecd38c0e3b465ba4e47e51a;hb=9f3572d98bb948c9689cd1f75401a029451fa001;hp=c81c5fce6bc7c3a1e75478abe64c5649b9390e01;hpb=04265f11d1f21416ccebd2dcaa1d903dc781b36e;p=lilypond.git diff --git a/lily/score-engraver.cc b/lily/score-engraver.cc index c81c5fce6b..ba80e75bb6 100644 --- a/lily/score-engraver.cc +++ b/lily/score-engraver.cc @@ -11,7 +11,6 @@ #include "all-font-metrics.hh" #include "axis-group-interface.hh" #include "context-def.hh" -#include "dispatcher.hh" #include "global-context.hh" #include "international.hh" #include "main.hh" @@ -20,7 +19,6 @@ #include "paper-column-engraver.hh" #include "paper-column.hh" #include "paper-score.hh" -#include "stream-event.hh" #include "system.hh" #include "warn.hh" @@ -35,19 +33,20 @@ Score_engraver::derived_mark () const { if (pscore_) scm_gc_mark (pscore_->self_scm ()); + Score_translator::derived_mark (); Engraver_group::derived_mark (); } -IMPLEMENT_LISTENER (Score_engraver, prepare); void -Score_engraver::prepare (SCM) +Score_engraver::prepare (Moment m) { + (void) m; + precomputed_recurse_over_translators (context (), START_TRANSLATION_TIMESTEP, DOWN); } -IMPLEMENT_LISTENER (Score_engraver, finish); void -Score_engraver::finish (SCM) +Score_engraver::finish () { recurse_over_translators (context (), &Translator::finalize, &Translator_group::finalize, @@ -76,7 +75,6 @@ Score_engraver::initialize () pscore_ = new Paper_score (dynamic_cast (context ()->get_output_def ())); pscore_->unprotect (); - context ()->set_property ("output", pscore_->self_scm ()); SCM props = updated_grob_properties (context (), ly_symbol2scm ("System")); @@ -89,39 +87,16 @@ Score_engraver::initialize () Engraver_group::initialize (); } -void -Score_engraver::connect_to_context (Context *c) -{ - Engraver_group::connect_to_context (c); - - Dispatcher *d = c->get_global_context ()->event_source (); - d->add_listener (GET_LISTENER (one_time_step), ly_symbol2scm ("OneTimeStep")); - d->add_listener (GET_LISTENER (prepare), ly_symbol2scm ("Prepare")); - d->add_listener (GET_LISTENER (finish), ly_symbol2scm ("Finish")); -} - -void -Score_engraver::disconnect_from_context () -{ - Dispatcher *d = context ()->get_global_context ()->event_source (); - d->remove_listener (GET_LISTENER (one_time_step), ly_symbol2scm ("OneTimeStep")); - d->remove_listener (GET_LISTENER (prepare), ly_symbol2scm ("Prepare")); - d->remove_listener (GET_LISTENER (finish), ly_symbol2scm ("Finish")); - - Engraver_group::disconnect_from_context (); -} - void Score_engraver::finalize () { - Engraver_group::finalize (); + Score_translator::finalize (); typeset_all (); } -IMPLEMENT_LISTENER(Score_engraver, one_time_step); void -Score_engraver::one_time_step (SCM) +Score_engraver::one_time_step () { if (!to_boolean (context ()->get_property ("skipTypesetting"))) { @@ -157,6 +132,22 @@ Score_engraver::typeset_all () elems_.clear (); } +SCM +Score_engraver::get_output () +{ + Music_output *o = pscore_; + return o->self_scm (); +} + +bool +Score_engraver::try_music (Music *m) +{ + if (Engraver_group::try_music (m)) + return true; + + return false; +} + ADD_TRANSLATOR_GROUP (Score_engraver, /* doc */ "Top level engraver. Takes care of generating columns and the complete system (ie. System) " "\n\n " @@ -170,7 +161,7 @@ ADD_TRANSLATOR_GROUP (Score_engraver, "System ", /* accept */ - "", + "break-event", /* read */ "currentMusicalColumn "