* lexer-gcc-3.1.sh: Remove.
[lilypond/patrick.git] / lily / glissando-engraver.cc
blob6368e05a09554f9549c501431ae6e9f4eed873ee
1 /*
2 note-head-line-engraver.cc -- implement Note_head_line_engraver
4 source file of the GNU LilyPond music typesetter
6 (c) 2000--2006 Jan Nieuwenhuizen <janneke@gnu.org>
7 */
9 #include "engraver.hh"
10 #include "international.hh"
11 #include "rhythmic-head.hh"
12 #include "spanner.hh"
13 #include "stream-event.hh"
14 #include "warn.hh"
16 #include "translator.icc"
18 /**
19 Create line-spanner grobs for glissandi lines that connect note
20 heads.
22 class Glissando_engraver : public Engraver
24 public:
25 TRANSLATOR_DECLARATIONS (Glissando_engraver);
27 protected:
28 DECLARE_TRANSLATOR_LISTENER (glissando);
29 DECLARE_ACKNOWLEDGER (rhythmic_head);
30 virtual void finalize ();
32 void stop_translation_timestep ();
33 void process_music ();
34 private:
35 Spanner *line_;
36 Spanner *last_line_;
37 Stream_event *event_;
40 Glissando_engraver::Glissando_engraver ()
42 last_line_ = line_ = 0;
43 event_ = 0;
46 IMPLEMENT_TRANSLATOR_LISTENER (Glissando_engraver, glissando);
47 void
48 Glissando_engraver::listen_glissando (Stream_event *ev)
50 ASSIGN_EVENT_ONCE (event_, ev);
53 void
54 Glissando_engraver::process_music ()
56 if (event_)
57 line_ = make_spanner ("Glissando", event_->self_scm ());
60 void
61 Glissando_engraver::acknowledge_rhythmic_head (Grob_info info)
63 Grob *g = info.grob ();
64 if (line_)
65 line_->set_bound (LEFT, g);
67 if (last_line_)
68 last_line_->set_bound (RIGHT, g);
71 void
72 Glissando_engraver::stop_translation_timestep ()
74 if (last_line_ && last_line_->get_bound (RIGHT))
75 last_line_ = 0;
76 if (line_)
78 if (last_line_)
79 programming_error ("overwriting glissando");
80 last_line_ = line_;
82 line_ = 0;
83 event_ = 0;
86 void
87 Glissando_engraver::finalize ()
89 if (line_)
91 string msg = _ ("unterminated glissando");
93 if (event_)
94 event_->origin ()->warning (msg);
95 else
96 warning (msg);
98 line_->suicide ();
99 line_ = 0;
103 ADD_ACKNOWLEDGER (Glissando_engraver, rhythmic_head);
104 ADD_TRANSLATOR (Glissando_engraver,
105 /* doc */ "Engrave a glissandi",
106 /* create */ "Glissando",
107 /* accept */ "glissando-event",
108 /* read */ "followVoice",
109 /* write */ "");