X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fengraver.cc;h=cf2eebbe9b5c4a65515ba6a1fd3974ea656659a3;hb=5e08569186d16ee6f01ea4495fe3a1510eb3cee7;hp=b7bc326c1506e23763cce11847ed3c1c94f6f815;hpb=02c656d3b0cb895cc81b428d699d960746800e45;p=lilypond.git diff --git a/lily/engraver.cc b/lily/engraver.cc index b7bc326c15..cf2eebbe9b 100644 --- a/lily/engraver.cc +++ b/lily/engraver.cc @@ -3,24 +3,24 @@ Sourcefile of GNU LilyPond music type setter - (c) 1997--2005 Han-Wen Nienhuys + (c) 1997--2006 Han-Wen Nienhuys */ #include "engraver.hh" +#include "context.hh" +#include "item.hh" +#include "lilypond-key.hh" #include "music.hh" #include "score-engraver.hh" -#include "warn.hh" #include "spanner.hh" -#include "item.hh" -#include "context.hh" -#include "score-context.hh" -#include "lilypond-key.hh" +#include "stream-event.hh" +#include "warn.hh" -Engraver_group_engraver * +Engraver_group * Engraver::get_daddy_engraver () const { - return dynamic_cast (get_daddy_translator ()); + return dynamic_cast (get_daddy_translator ()); } void @@ -29,35 +29,69 @@ Engraver::announce_grob (Grob_info inf) get_daddy_engraver ()->announce_grob (inf); } +void +Engraver::announce_end_grob (Grob_info inf) +{ + get_daddy_engraver ()->announce_grob (inf); +} + /* - CAUSE is the object (typically a Music object) that + CAUSE is the object (typically a Stream_event object) that was the reason for making E. */ void Engraver::announce_grob (Grob *e, SCM cause) { - if (unsmob_music (cause) || unsmob_grob (cause)) + /* TODO: Remove Music code when it's no longer needed */ + if (Music *m = unsmob_music (cause)) + { + cause = m->to_event ()->unprotect (); + } + if (unsmob_stream_event (cause) || unsmob_grob (cause)) e->set_property ("cause", cause); Grob_info i (this, e); - Engraver *g = get_daddy_engraver (); + Engraver_group *g = get_daddy_engraver (); if (g) g->announce_grob (i); } -Engraver::Engraver () + +/* + CAUSE is the object (typically a Music object) that + was the reason for making E. +*/ +void +Engraver::announce_end_grob (Grob *e, SCM cause) { + /* TODO: Remove Music code when it's no longer needed */ + if (Music *m = unsmob_music (cause)) + { + cause = m->to_event ()->unprotect (); + } + if (unsmob_stream_event (cause) || unsmob_grob (cause)) + e->set_property ("cause", cause); + + Grob_info i (this, e); + + i.start_end_ = STOP; + Engraver_group *g = get_daddy_engraver (); + if (g) + g->announce_grob (i); } -Score_engraver * -Engraver::get_score_engraver () const + +Engraver::Engraver () { - return dynamic_cast (get_score_context ()->implementation ()); } +#include "translator.icc" + ADD_TRANSLATOR (Engraver, - "", "", + "Base class for engravers. Does nothing, so it is not used.", + "", + "", "", - "", "", ""); + "");