X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fengraver.cc;h=b756d742dcad8c2d829729c84b55e297738e6c98;hb=987371d22b8402ee0cfd7aa5194e1664753e252e;hp=7ef5dda44f2edc40560e39078272707ab2b5fb34;hpb=fdfd147f1233eef6ea8b176290221b5a4ec38868;p=lilypond.git diff --git a/lily/engraver.cc b/lily/engraver.cc index 7ef5dda44f..b756d742dc 100644 --- a/lily/engraver.cc +++ b/lily/engraver.cc @@ -3,49 +3,65 @@ Sourcefile of GNU LilyPond music type setter - (c) 1997--2000 Han-Wen Nienhuys + (c) 1997--2006 Han-Wen Nienhuys */ -#include "music-list.hh" -#include "musical-request.hh" #include "engraver.hh" -#include "engraver-group-engraver.hh" -#include "debug.hh" -#include "paper-def.hh" -#include "score-element.hh" -#include "group-interface.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" -void -Engraver::announce_element (Score_element_info i) +Engraver_group * +Engraver::get_daddy_engraver () const { - Score_element * e = i.elem_l_; - - if (e->get_elt_property ("interfaces") == SCM_EOL) - Group_interface (e, "interfaces").add_thing (ly_symbol2scm (e->name())); - - if (!i.origin_trans_l_) - i.origin_trans_l_ = this; - daddy_grav_l()->announce_element (i); + return dynamic_cast (get_daddy_translator ()); } - + void -Engraver::typeset_element (Score_element*p) +Engraver::announce_grob (Grob_info inf) { - daddy_grav_l()->typeset_element (p); + get_daddy_engraver ()->announce_grob (inf); } +/* + CAUSE is the object (typically a Music object) that + was the reason for making E. +*/ +void +Engraver::announce_grob (Grob *e, SCM cause) +{ + if (unsmob_music (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); +} -Paper_def* -Engraver::paper_l () const +Engraver::Engraver () { - return dynamic_cast(output_def_l_); } -Engraver_group_engraver* -Engraver::daddy_grav_l () const +Score_engraver * +Engraver::get_score_engraver () const { - return (daddy_trans_l_ ) - ? dynamic_cast (daddy_trans_l_) - : 0; + return dynamic_cast (get_score_context ()->implementation ()); } + +#include "translator.icc" + +ADD_TRANSLATOR (Engraver, + "Base class for engravers. Does nothing, so it is not used.", + "", + "", + "", + ""); +