* stepmake/stepmake/generic-vars.make (LOOP): Add PLUS to keep -j
[lilypond/patrick.git] / lily / rest-collision-engraver.cc
blob2fa66dbe54361f09589e4ebfd0d75121adae307a
1 /*
2 rest-collision-engraver.cc -- implement Rest_collision_engraver
4 source file of the GNU LilyPond music typesetter
6 (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
7 */
9 #include "warn.hh"
10 #include "engraver.hh"
11 #include "rest-collision.hh"
12 #include "note-column.hh"
14 class Rest_collision_engraver : public Engraver
16 Item *rest_collision_;
17 vsize rest_count_;
18 Link_array__Grob_ note_columns_;
19 protected:
20 DECLARE_ACKNOWLEDGER (note_column);
21 void process_acknowledged ();
22 void stop_translation_timestep ();
23 public:
24 TRANSLATOR_DECLARATIONS (Rest_collision_engraver);
27 Rest_collision_engraver::Rest_collision_engraver ()
29 rest_collision_ = 0;
30 rest_count_ = 0;
33 void
34 Rest_collision_engraver::process_acknowledged ()
36 if (rest_collision_
37 || note_columns_.empty ()
38 || !rest_count_
39 || (note_columns_.size () == rest_count_
40 && rest_count_ < 2))
41 return;
43 rest_collision_ = make_item ("RestCollision", SCM_EOL);
45 for (vsize i = 0; i < note_columns_.size (); i++)
46 Rest_collision::add_column (rest_collision_, note_columns_[i]);
49 void
50 Rest_collision_engraver::acknowledge_note_column (Grob_info i)
52 note_columns_.push_back (i.grob ());
53 if (Note_column::has_rests (i.grob ()))
54 rest_count_++;
57 void
58 Rest_collision_engraver::stop_translation_timestep ()
60 rest_collision_ = 0;
61 note_columns_.clear ();
62 rest_count_ = 0;
65 #include "translator.icc"
67 ADD_ACKNOWLEDGER (Rest_collision_engraver, note_column);
68 ADD_TRANSLATOR (Rest_collision_engraver,
69 /* doc */ "Handles collisions of rests.",
70 /* create */ "RestCollision",
71 /* accept */ "",
72 /* read */ "",
73 /* write */ "");