]> git.donarmstrong.com Git - lilypond.git/blob - lily/breathing-sign-engraver.cc
Fix some bugs in the dynamic engraver and PostScript backend
[lilypond.git] / lily / breathing-sign-engraver.cc
1 /*
2   breathing_sign-engraver.cc -- implement Breathing_sign_engraver
3
4   (c) 1999--2006 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 #include "staff-symbol-referencer.hh"
16 #include "breathing-sign.hh"
17 #include "engraver-group.hh"
18 #include "item.hh"
19
20 class Breathing_sign_engraver : public Engraver
21 {
22 public:
23   TRANSLATOR_DECLARATIONS (Breathing_sign_engraver);
24
25 protected:
26   virtual bool try_music (Music *event);
27   void process_acknowledged ();
28   void stop_translation_timestep ();
29
30 private:
31   Music *breathing_sign_event_;
32   Grob *breathing_sign_;
33 };
34
35 Breathing_sign_engraver::Breathing_sign_engraver ()
36 {
37   breathing_sign_ = 0;
38   breathing_sign_event_ = 0;
39 }
40
41 bool
42 Breathing_sign_engraver::try_music (Music *r)
43 {
44   breathing_sign_event_ = r;
45   return true;
46 }
47
48 void
49 Breathing_sign_engraver::process_acknowledged ()
50 {
51   if (breathing_sign_event_ && ! breathing_sign_)
52     {
53       breathing_sign_ = make_item ("BreathingSign", breathing_sign_event_->self_scm ());
54       breathing_sign_event_ = 0;
55     }
56 }
57
58 void
59 Breathing_sign_engraver::stop_translation_timestep ()
60 {
61   breathing_sign_ = 0;
62   breathing_sign_event_ = 0;
63 }
64
65 #include "translator.icc"
66
67 ADD_TRANSLATOR (Breathing_sign_engraver,
68                 /* doc */ "",
69                 /* create */ "BreathingSign",
70                 /* accept */ "breathing-event",
71                 /* read */ "",
72                 /* write */ "");