X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fengraver.cc;h=cf2eebbe9b5c4a65515ba6a1fd3974ea656659a3;hb=f5b1f319b1b5b7517972dfebdac2292a99531d67;hp=02e683b05501f8dfea9bdc53e159e514c1914af8;hpb=fc3e875d6bf06f0680e897faffdcab36ad975a03;p=lilypond.git diff --git a/lily/engraver.cc b/lily/engraver.cc index 02e683b055..cf2eebbe9b 100644 --- a/lily/engraver.cc +++ b/lily/engraver.cc @@ -3,54 +3,95 @@ Sourcefile of GNU LilyPond music type setter - (c) 1997--2001 Han-Wen Nienhuys + (c) 1997--2006 Han-Wen Nienhuys */ -#include "music.hh" #include "engraver.hh" -#include "engraver-group-engraver.hh" -#include "grob.hh" +#include "context.hh" +#include "item.hh" +#include "lilypond-key.hh" +#include "music.hh" +#include "score-engraver.hh" +#include "spanner.hh" +#include "stream-event.hh" +#include "warn.hh" + +Engraver_group * +Engraver::get_daddy_engraver () const +{ + return dynamic_cast (get_daddy_translator ()); +} void Engraver::announce_grob (Grob_info inf) { - daddy_grav_l ()->announce_grob (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 Stream_event object) that + was the reason for making E. +*/ void -Engraver::announce_grob (Grob* e, Music *m) +Engraver::announce_grob (Grob *e, SCM cause) { - if (m && m->origin ()->location_str ().length_i ()) + /* TODO: Remove Music code when it's no longer needed */ + if (Music *m = unsmob_music (cause)) { - e->set_grob_property ("origin", m->get_mus_property ("origin")); + cause = m->to_event ()->unprotect (); } - - Grob_info i (e, m); - if (!i.origin_trans_l_) - i.origin_trans_l_ = this; - daddy_grav_l ()->announce_grob (i); + if (unsmob_stream_event (cause) || unsmob_grob (cause)) + e->set_property ("cause", cause); + + Grob_info i (this, e); + + Engraver_group *g = get_daddy_engraver (); + if (g) + g->announce_grob (i); } - +/* + CAUSE is the object (typically a Music object) that + was the reason for making E. +*/ void -Engraver::typeset_grob (Grob*p) +Engraver::announce_end_grob (Grob *e, SCM cause) { - daddy_grav_l ()->typeset_grob (p); -} + /* 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_group_engraver* -Engraver::daddy_grav_l () const -{ - return (daddy_trans_l_) - ? dynamic_cast (daddy_trans_l_) - : 0; + i.start_end_ = STOP; + Engraver_group *g = get_daddy_engraver (); + if (g) + g->announce_grob (i); } -void -Engraver::process_music () + +Engraver::Engraver () { - } + +#include "translator.icc" + +ADD_TRANSLATOR (Engraver, + "Base class for engravers. Does nothing, so it is not used.", + "", + "", + "", + ""); +