X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fengraver.cc;h=886f3b199b2782728c7b98babfc546475862cd2c;hb=abd05b0ad0ccc4b63bb77ed128a8f28d5d48f330;hp=ecad05587023cc8ee2a188e9357a5bb31168b3d7;hpb=30270f615f32a6b93e7b09bf55d1b8a7d7aad7ca;p=lilypond.git diff --git a/lily/engraver.cc b/lily/engraver.cc index ecad055870..886f3b199b 100644 --- a/lily/engraver.cc +++ b/lily/engraver.cc @@ -1,62 +1,83 @@ /* engraver.cc -- implement Engraver - Sourcefile of GNU LilyPond musictypesetter + Sourcefile of GNU LilyPond music type setter - (c) 1997--1998 Han-Wen Nienhuys + (c) 1997--2004 Han-Wen Nienhuys */ -#include "music-list.hh" -#include "musical-request.hh" +#include "music.hh" #include "engraver.hh" -#include "engraver-group.hh" -#include "debug.hh" +#include "engraver-group-engraver.hh" +#include "grob.hh" +#include "score-engraver.hh" +#include "warn.hh" +#include "spanner.hh" +#include "item.hh" +#include "context.hh" +#include "score-context.hh" + +Engraver_group_engraver* +Engraver::get_daddy_engraver () const +{ + return dynamic_cast (get_daddy_translator ()); +} void -Engraver::fill_staff_info (Staff_info&) +Engraver::announce_grob (Grob_info inf) { - + get_daddy_engraver ()->announce_grob (inf); } +/* + CAUSE is the object (typically a Music object) that + was the reason for making E. + */ void -Engraver::announce_element (Score_element_info i) +Engraver::announce_grob (Grob* e, SCM cause) { - i.origin_grav_l_arr_.push (this); - daddy_grav_l()->announce_element (i); + /* + TODO: junk grob-info, and make a cause grob-property to store + `causes' generically. + */ + if (unsmob_music (cause) || unsmob_grob (cause)) + e->set_property ("cause", cause); + + Grob_info i; + i.grob_ = e; + if (!i.origin_trans_) + i.origin_trans_ = this; + + get_daddy_engraver ()->announce_grob (i); } + void -Engraver::typeset_element (Score_element*p) +Engraver::typeset_grob (Grob*p) { - daddy_grav_l()->typeset_element (p); + Engraver *dad = get_daddy_engraver (); + dad->typeset_grob (p); } -Paper_def* -Engraver::paper() const + + +Engraver::Engraver () { - return (Paper_def*)output_def_l_; } -Staff_info -Engraver::get_staff_info() const +Score_engraver* +Engraver::get_score_engraver () const { - if (daddy_grav_l()) - return daddy_grav_l()->get_staff_info(); - Staff_info info; - return info; + SCM t = get_score_context ()->implementation_; + return dynamic_cast (unsmob_translator (t)); } -IMPLEMENT_IS_TYPE_B1(Engraver, Translator); - +ENTER_DESCRIPTION (Engraver, + "", "", + "", + "", "", ""); -Engraver_group_engraver* -Engraver::daddy_grav_l () const -{ - return (daddy_trans_l_ ) - ? (Engraver_group_engraver*) daddy_trans_l_->access_Engraver () - : 0; -}