]> git.donarmstrong.com Git - lilypond.git/blob - lily/script-engraver.cc
release: 1.0.1
[lilypond.git] / lily / script-engraver.cc
1 /*
2   script-reg.cc -- implement Script_engraver
3
4   (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
5 */
6
7 #include "script-engraver.hh"
8 #include "script.hh"
9 #include "musical-request.hh"
10 #include "stem.hh"
11 #include "staff-sym.hh"
12 #include "general-script-def.hh"
13 #include "text-def.hh"
14
15
16 Script_engraver::Script_engraver()
17 {
18   do_post_move_processing();
19 }
20
21 bool
22 Script_engraver::do_try_request (Request *r_l)
23 {
24   if (!r_l->access_Musical_req () || ! r_l->access_Musical_req ()->access_Musical_script_req ())
25     return false ;
26   
27   for (int i=0; i < script_req_l_arr_.size(); i++) 
28     {
29       if (r_l->equal_b (script_req_l_arr_[i]))
30         return true;
31     }
32   script_req_l_arr_.push (r_l->access_Script_req ());
33   
34   return true;
35 }
36
37 void
38 Script_engraver::do_process_requests()
39 {
40   if (script_p_arr_.size ())
41     return ;
42   
43   for (int i=0; i < script_req_l_arr_.size(); i++)
44     {
45       Script_req* l=script_req_l_arr_[i];
46       Script *p =new Script;
47       p->dir_ = l->dir_;
48       p->specs_p_ = l->scriptdef_p_->clone ();
49       script_p_arr_.push (p);
50       announce_element (Score_element_info (p, l));
51     }
52 }
53
54 void
55 Script_engraver::do_pre_move_processing()
56 {
57   Staff_symbol* s_l = get_staff_info().staff_sym_l_;
58   for (int i=0; i < script_p_arr_.size(); i++) 
59     {
60       Script*script_p = script_p_arr_[i];
61       if (!script_p->specs_p_->inside_b())
62         script_p->add_support (s_l);
63
64       if (script_p->specs_p_->is_type_b (Text_def::static_name ()))
65         {
66           Text_def * td_l = (Text_def*)script_p->specs_p_;
67           Scalar style = get_property ("textstyle");
68           if (style.to_bool ())
69             {
70               td_l->style_str_= style;
71             }
72         }
73       typeset_element (script_p);
74     }
75   script_p_arr_.clear();
76 }
77
78 void
79 Script_engraver::do_post_move_processing()
80 {
81   script_req_l_arr_.clear();
82 }
83
84
85 IMPLEMENT_IS_TYPE_B1(Script_engraver,Engraver);
86 ADD_THIS_TRANSLATOR(Script_engraver);