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_)
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_);
81 if (finished_extender_)
83 finished_extender_->warning (_("unterminated extender"));
84 typeset_grob (finished_extender_);
85 finished_extender_ =0;
90 Extender_engraver::process_music ()
94 extender_ = new Spanner (get_property ("LyricExtender"));
95 announce_grob (extender_, ev_->self_scm());
101 Extender_engraver::stop_translation_timestep ()
103 if (finished_extender_ && finished_extender_->get_bound (RIGHT))
105 typeset_grob (finished_extender_);
106 finished_extender_ = 0;
109 if (finished_extender_ && extender_)
111 programming_error ("Haven't finished extender yet.");
112 typeset_grob (finished_extender_);
113 finished_extender_ =0;
117 finished_extender_ = extender_;
122 Extender_engraver::start_translation_timestep ()
128 ENTER_DESCRIPTION(Extender_engraver,
129 /* descr */ "Create lyric extenders",
130 /* creats*/ "LyricExtender",
131 /* accepts */ "extender-event",
132 /* acks */ "lyric-syllable-interface",