]> git.donarmstrong.com Git - lilypond.git/blob - lily/auto-plet-engraver.cc
release: 1.0.17
[lilypond.git] / lily / auto-plet-engraver.cc
1 /*   
2   auto-plet-engraver.cc --  implement Auto_plet_engraver
3   
4   source file of the GNU LilyPond music typesetter
5   
6   (c) 1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7   
8  */
9
10 #include "auto-plet-engraver.hh"
11 #include "command-request.hh"
12 #include "slur.hh"
13 #include "note-column.hh"
14
15 bool
16 Tuplet_engraver::do_try_request (Request *r)
17 {
18   Command_req * c = r->access_Command_req ();
19   if (!(c &&
20       c->access_Bracket_req ()))
21     {
22       return false;
23     }
24
25   Bracket_req * b = c->access_Bracket_req ();
26   bracket_req_arr_.push (b);
27   return true;
28 }
29
30
31 void
32 Tuplet_engraver::do_process_requests ()
33 {
34   int stopcount =0;
35   Link_array<Slur> start_arr;
36   
37   for (int i=0; i < bracket_req_arr_.size (); i++)
38     {
39       if (bracket_req_arr_[i]->spantype == Span_req::STOP)
40         stopcount++;
41       if (bracket_req_arr_[i]->spantype == Span_req::START)
42         {
43           Slur *sp =new Slur;
44           start_arr.push  (sp);
45           announce_element (Score_element_info (sp, bracket_req_arr_[i]));
46         }
47     }
48
49   for (; stopcount--; )
50     {
51       Slur *sp = started_span_p_arr_.pop ();
52       stop_now_span_p_arr_.push (sp);
53     }
54
55   for (int i=0; i < start_arr.size (); i++)
56     started_span_p_arr_.push (start_arr.pop ());
57 }
58
59 void
60 Tuplet_engraver::acknowledge_element (Score_element_info i)
61 {
62   if (i.elem_l_->is_type_b (Note_column::static_name ()))
63     {
64       Note_column *nc = (Note_column*)i.elem_l_->access_Item ();
65       for (int j =0; j  <started_span_p_arr_.size (); j++)
66         started_span_p_arr_[j]->add_column (nc);
67     }
68 }
69
70 void
71 Tuplet_engraver::do_pre_move_processing ()
72 {
73   typeset_all ();
74 }
75
76 void
77 Tuplet_engraver::typeset_all ()
78 {
79   for (int i=0; i < stop_now_span_p_arr_.size (); i++)
80     {
81       typeset_element (stop_now_span_p_arr_[i]);
82     }
83
84   stop_now_span_p_arr_.clear ();
85 }
86
87 void
88 Tuplet_engraver::do_removal_processing ()
89 {
90   typeset_all ();
91   for (int i=0; i < started_span_p_arr_.size (); i++)
92     {
93       typeset_element (started_span_p_arr_[i]);
94     }  
95 }
96
97 ADD_THIS_TRANSLATOR(Tuplet_engraver);
98 IMPLEMENT_IS_TYPE_B1(Tuplet_engraver, Engraver);
99
100 Tuplet_engraver::Tuplet_engraver()
101 {
102 }
103
104
105 void
106 Tuplet_engraver::do_post_move_processing ()
107 {
108   bracket_req_arr_.clear (); 
109 }