]> git.donarmstrong.com Git - lilypond.git/blob - lily/spanner-break-forbid-engraver.cc
cd81a8d147312247515c3738072a46b773763d4b
[lilypond.git] / lily / spanner-break-forbid-engraver.cc
1 /* 
2   spanner-break-forbid-engraver.cc -- implement Spanner_break_forbid_engraver
3   
4   source file of the GNU LilyPond music typesetter
5   
6   (c) 2007 Han-Wen Nienhuys <hanwen@lilypond.org>
7 */
8
9
10
11 #include "engraver.hh"
12 #include "international.hh"
13 #include "spanner.hh"
14 #include "stream-event.hh"
15 #include "warn.hh"
16 #include "context.hh"
17
18 #include "translator.icc"
19
20 class Spanner_break_forbid_engraver : public Engraver
21 {
22   TRANSLATOR_DECLARATIONS (Spanner_break_forbid_engraver);
23   vector<Spanner*> running_spanners_;
24 protected:
25   DECLARE_ACKNOWLEDGER (unbreakable_spanner);
26   DECLARE_END_ACKNOWLEDGER (unbreakable_spanner);
27
28   void process_music ();
29 };
30
31
32 void
33 Spanner_break_forbid_engraver::process_music ()
34 {
35   if (running_spanners_.size ())
36     {
37       context ()->get_score_context ()->set_property ("forbidBreak", SCM_BOOL_T);
38     }
39 }
40
41 void
42 Spanner_break_forbid_engraver::acknowledge_end_unbreakable_spanner (Grob_info gi)
43 {
44   vector<Spanner*>::iterator i = find (running_spanners_.begin (), running_spanners_.end (),
45                                        gi.spanner ());
46   if (i != running_spanners_.end ())
47     running_spanners_.erase (i);
48 }
49
50 void
51 Spanner_break_forbid_engraver::acknowledge_unbreakable_spanner (Grob_info gi)
52 {
53   if (!to_boolean (gi.grob ()->get_property ("breakable")))
54     running_spanners_.push_back (gi.spanner ());
55 }
56
57 Spanner_break_forbid_engraver::Spanner_break_forbid_engraver ()
58 {
59 }
60
61
62 ADD_END_ACKNOWLEDGER (Spanner_break_forbid_engraver, unbreakable_spanner);
63 ADD_ACKNOWLEDGER (Spanner_break_forbid_engraver, unbreakable_spanner);
64 ADD_TRANSLATOR (Spanner_break_forbid_engraver,
65                 /* doc */
66                 "Forbid breaks in certain spanners.",
67
68                 /* create */
69                 "",
70
71                 /* read */
72                 "",
73
74                 /* write */
75                 ""
76                 );