]> git.donarmstrong.com Git - lilypond.git/blob - lily/breathing-sign-engraver.cc
(DECLARE_EVENT_SWALLOWER): ENTER_DESCRIPTION -> ADD_TRANSLATOR
[lilypond.git] / lily / breathing-sign-engraver.cc
1 /*
2   breathing_sign-engraver.cc -- implement Breathing_sign_engraver
3
4   (c) 1999--2004 Michael Krause
5
6   written for the GNU LilyPond music typesetter
7
8 TODO:
9
10   . Cancel any beams running through the breathing sign
11  ([e8 \breathe f e f] should become [e8] \breathe [f e f])
12   . Spacing is not yet completely pretty
13
14 */
15
16 #include "staff-symbol-referencer.hh"
17 #include "breathing-sign.hh"
18 #include "engraver-group-engraver.hh"
19 #include "item.hh"
20
21
22 class Breathing_sign_engraver : public Engraver {
23 public:
24   TRANSLATOR_DECLARATIONS (Breathing_sign_engraver);
25   
26 protected:
27   virtual bool try_music (Music *req);
28   virtual void process_acknowledged_grobs ();
29   virtual void stop_translation_timestep ();
30
31 private:
32   Music * breathing_sign_req_;
33   Grob * breathing_sign_;
34 };
35
36 Breathing_sign_engraver::Breathing_sign_engraver ()
37 {
38   breathing_sign_ = 0;
39   breathing_sign_req_ = 0;
40 }
41
42 bool
43 Breathing_sign_engraver::try_music (Music*r)
44 {
45   breathing_sign_req_ = r;
46   return true;
47 }
48
49 void
50 Breathing_sign_engraver::process_acknowledged_grobs ()
51 {
52   if (breathing_sign_req_ && ! breathing_sign_)
53     {
54       breathing_sign_ = make_item ("BreathingSign", breathing_sign_req_->self_scm ());
55       breathing_sign_req_ = 0;
56     }
57 }
58
59 void 
60 Breathing_sign_engraver::stop_translation_timestep ()
61 {
62   breathing_sign_ = 0;
63   breathing_sign_req_ = 0;
64 }
65
66
67 ADD_TRANSLATOR (Breathing_sign_engraver,
68 /* descr */       "",
69 /* creats*/       "BreathingSign",
70 /* accepts */     "breathing-event",
71 /* acks  */      "",
72 /* reads */       "",
73 /* write */       "");