2 engraver.cc -- implement Engraver
4 Sourcefile of GNU LilyPond music type setter
6 (c) 1997--2002 Han-Wen Nienhuys <hanwen@cs.uu.nl>
10 #include "engraver.hh"
11 #include "engraver-group-engraver.hh"
14 #include "score-engraver.hh"
18 Engraver::announce_grob (Grob_info inf)
20 daddy_grav_l ()->announce_grob (inf);
24 Engraver::announce_grob (Grob* e, Music *m)
27 TODO: junk grob-info, and make a cause grob-property to store
31 if (m && store_locations_global_b
32 && m->origin ()->location_str ().length_i ())
34 e->set_grob_property ("origin", m->get_mus_property ("origin"));
37 Grob_info i (e, m ? m->self_scm () : SCM_UNDEFINED);
38 if (!i.origin_trans_l_)
39 i.origin_trans_l_ = this;
40 daddy_grav_l ()->announce_grob (i);
46 Engraver::typeset_grob (Grob*p)
48 daddy_grav_l ()->typeset_grob (p);
52 Engraver_group_engraver*
53 Engraver::daddy_grav_l () const
55 return (daddy_trans_l_)
56 ? dynamic_cast<Engraver_group_engraver *> (daddy_trans_l_)
61 Engraver::process_music ()
72 Engraver::top_engraver () const
77 if (dynamic_cast<Score_engraver*>((Engraver*)this))
78 return dynamic_cast<Score_engraver*> ((Engraver*)this);
81 return dynamic_cast<Engraver*> (daddy_trans_l_)->top_engraver ();
83 programming_error ("No score engraver!");
87 ENTER_DESCRIPTION(Engraver,