]> git.donarmstrong.com Git - lilypond.git/blob - lily/melody-engraver.cc
Run `make grand-replace'.
[lilypond.git] / lily / melody-engraver.cc
1 /*
2   melody-engraver.cc -- implement Melody_engraver
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 1997--2008 Han-Wen Nienhuys <hanwen@xs4all.nl>
7 */
8
9
10 #include "engraver.hh"
11
12 #include "item.hh"
13 #include "melody-spanner.hh"
14 #include "pointer-group-interface.hh"
15
16 class Melody_engraver : public Engraver
17 {
18   Grob *melody_item_;
19   Grob *stem_; 
20 protected:
21   
22   DECLARE_ACKNOWLEDGER (stem);
23   DECLARE_ACKNOWLEDGER (slur);
24   TRANSLATOR_DECLARATIONS (Melody_engraver);
25   void stop_translation_timestep ();
26   void process_music ();
27 };
28
29
30 Melody_engraver::Melody_engraver ()
31 {
32   stem_ = 0;
33   melody_item_ = 0;
34 }
35
36 void
37 Melody_engraver::process_music ()
38 {
39   if (scm_is_string (get_property ("whichBar")))
40     melody_item_ = 0;
41 }
42   
43 void
44 Melody_engraver::stop_translation_timestep ()
45 {
46   if (stem_
47       && !is_direction (stem_->get_property_data ("neutral-direction")))
48     {
49       extract_grob_set (stem_, "rests", rests);
50       if (rests.size ())
51         melody_item_ = 0;
52       else
53         {
54           if (!melody_item_)
55             melody_item_ = make_item ("MelodyItem", stem_->self_scm ());
56
57           Melody_spanner::add_stem (melody_item_, stem_);
58         }
59     }
60   stem_ = 0;
61 }
62
63
64 void
65 Melody_engraver::acknowledge_slur (Grob_info info)
66 {
67   (void)info;
68   melody_item_ = 0;
69 }
70
71
72 void
73 Melody_engraver::acknowledge_stem (Grob_info info)
74 {
75   stem_ = info.grob ();
76 }
77
78
79
80 #include "translator.icc"
81
82 ADD_ACKNOWLEDGER (Melody_engraver, stem);
83 ADD_ACKNOWLEDGER (Melody_engraver, slur);
84
85 ADD_TRANSLATOR (Melody_engraver,
86                 /* doc */
87                 "Create information for context dependent typesetting"
88                 " decisions.",
89
90                 /* create */
91                 "MelodyItem ",
92
93                 /* read */
94                 "",
95
96                 /* write */
97                 ""
98                 );
99