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