]> git.donarmstrong.com Git - lilypond.git/blob - lily/script-grav.cc
release: 0.0.72pre
[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         if ( !Script_req::compare(*script_req_l_arr_[i], *r_l->script())) {
26             return true;
27         }
28         
29     script_req_l_arr_.push( r_l->script());
30     
31     return true;
32 }
33
34 void
35 Script_engraver::do_process_requests()
36 {
37     for (int i=0; i < script_req_l_arr_.size(); i++){
38         Script_req* l=script_req_l_arr_[i];
39         Script *p =new Script;
40         p->dir_i_ = l->dir_i_;
41         p->specs_l_ = l->scriptdef_p_;
42         script_p_arr_.push(p);
43         announce_element(Score_elem_info(p, l));
44     }
45 }
46
47 bool
48 Script_engraver::acceptable_elem_b(Score_elem*s_l)
49 {
50     char const *nC = s_l->name();
51     return (nC == Stem::static_name());
52 }
53
54 void
55 Script_engraver::acknowledge_element(Score_elem_info info)
56 {
57     Score_elem *elem_l = info.elem_l_;
58     if (!acceptable_elem_b(elem_l))
59         return;
60     
61     for (int i=0; i < script_p_arr_.size(); i++) {
62         Script*script_l = script_p_arr_[i];
63         if (elem_l->name() == Stem::static_name())
64             script_l->set_stem((Stem*)elem_l->item());
65     }
66 }
67
68 void
69 Script_engraver::do_pre_move_processing()
70 {
71     Staff_symbol* s_l = get_staff_info().staff_sym_l_;
72     for (int i=0; i < script_p_arr_.size(); i++) {
73         
74         Script*script_p = script_p_arr_[i];
75         script_p->set_staffsym( s_l);
76         typeset_element(script_p);
77     }
78     script_p_arr_.set_size(0);
79 }
80
81 void
82 Script_engraver::do_post_move_processing()
83 {
84     script_req_l_arr_.set_size(0);
85 }
86
87 IMPLEMENT_STATIC_NAME(Script_engraver);
88 IMPLEMENT_IS_TYPE_B1(Script_engraver,Request_engraver);
89 ADD_THIS_ENGRAVER(Script_engraver);