]> git.donarmstrong.com Git - lilypond.git/blob - lily/script-grav.cc
release: 0.1.9
[lilypond.git] / lily / script-grav.cc
1 /*
2   script-reg.cc -- implement Script_engraver
3
4   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
5 */
6
7 #include "script-grav.hh"
8 #include "script.hh"
9 #include "musical-request.hh"
10 #include "stem.hh"
11 #include "staff-sym.hh"
12
13 Script_engraver::Script_engraver()
14 {
15   do_post_move_processing();
16 }
17
18 bool
19 Script_engraver::do_try_request (Request *r_l)
20 {
21   if (!r_l->musical() || ! r_l->musical ()->musicalscript ())
22         return false ;
23   
24   for (int i=0; i < script_req_l_arr_.size(); i++) 
25     {
26         if ( r_l->equal_b (script_req_l_arr_[i]))
27             return true;
28         
29     }
30   script_req_l_arr_.push (r_l->script());
31   
32   return true;
33 }
34
35 void
36 Script_engraver::do_process_requests()
37 {
38   for (int i=0; i < script_req_l_arr_.size(); i++)
39     {
40         Script_req* l=script_req_l_arr_[i];
41         Script *p =new Script;
42         p->dir_i_ = l->dir_i_;
43         p->specs_l_ = l->scriptdef_p_;
44         script_p_arr_.push (p);
45         announce_element (Score_elem_info (p, l));
46     }
47 }
48
49 void
50 Script_engraver::do_pre_move_processing()
51 {
52   Staff_symbol* s_l = get_staff_info().staff_sym_l_;
53   for (int i=0; i < script_p_arr_.size(); i++) 
54     {
55         Script*script_p = script_p_arr_[i];
56         script_p->set_staffsym (s_l);
57         typeset_element (script_p);
58     }
59   script_p_arr_.clear();
60 }
61
62 void
63 Script_engraver::do_post_move_processing()
64 {
65   script_req_l_arr_.clear();
66 }
67
68
69 IMPLEMENT_IS_TYPE_B1(Script_engraver,Engraver);
70 ADD_THIS_ENGRAVER(Script_engraver);