2 extender-engraver.cc -- implement Extender_engraver
4 source file of the GNU LilyPond music typesetter
6 (c) 1999--2003 Glen Prideaux <glenprideaux@iname.com>,
7 Han-Wen Nienhuys <hanwen@cs.uu.nl>,
8 Jan Nieuwenhuizen <janneke@gnu.org>
12 #include "lyric-extender.hh"
14 #include "engraver.hh"
16 class Extender_engraver : public Engraver
20 Spanner * finished_extender_;
22 TRANSLATOR_DECLARATIONS(Extender_engraver);
25 virtual void acknowledge_grob (Grob_info);
26 virtual void finalize ();
27 virtual bool try_music (Music*);
28 virtual void stop_translation_timestep ();
29 virtual void start_translation_timestep ();
30 virtual void process_music ();
38 Extender_engraver::Extender_engraver ()
41 finished_extender_ = 0;
46 Extender_engraver::acknowledge_grob (Grob_info i)
48 Item * item = dynamic_cast<Item*> (i.grob_);
50 if (item && item->internal_has_interface (ly_symbol2scm ("lyric-syllable-interface")))
53 extender_->set_bound (LEFT, item);
55 if (finished_extender_ && !finished_extender_->get_bound (RIGHT))
56 finished_extender_->set_bound (RIGHT, item);
62 Extender_engraver::try_music (Music* r)
72 Extender_engraver::finalize ()
76 extender_->warning (_ ("unterminated extender"));
77 typeset_grob (extender_);
80 if (finished_extender_)
82 finished_extender_->warning (_("unterminated extender"));
83 typeset_grob (finished_extender_);
84 finished_extender_ =0;
89 Extender_engraver::process_music ()
93 extender_ = new Spanner (get_property ("LyricExtender"));
94 announce_grob (extender_, ev_->self_scm());
100 Extender_engraver::stop_translation_timestep ()
102 if (finished_extender_ && finished_extender_->get_bound (RIGHT))
104 typeset_grob (finished_extender_);
105 finished_extender_ = 0;
108 if (finished_extender_ && extender_)
110 programming_error ("Haven't finished extender yet.");
111 typeset_grob (finished_extender_);
112 finished_extender_ =0;
116 finished_extender_ = extender_;
121 Extender_engraver::start_translation_timestep ()
127 ENTER_DESCRIPTION(Extender_engraver,
128 /* descr */ "Create lyric extenders",
129 /* creats*/ "LyricExtender",
130 /* accepts */ "extender-event",
131 /* acks */ "lyric-syllable-interface",