2 script-reg.cc -- implement Script_engraver
4 (c) 1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7 #include "script-engraver.hh"
9 #include "musical-request.hh"
11 #include "staff-sym.hh"
12 #include "general-script-def.hh"
13 #include "text-def.hh"
16 Script_engraver::Script_engraver()
18 do_post_move_processing();
22 Script_engraver::do_try_request (Request *r_l)
24 if (!r_l->access_Musical_req () || ! r_l->access_Musical_req ()->access_Musical_script_req ())
27 for (int i=0; i < script_req_l_arr_.size(); i++)
29 if (r_l->equal_b (script_req_l_arr_[i]))
32 script_req_l_arr_.push (r_l->access_Script_req ());
38 Script_engraver::do_process_requests()
40 if (script_p_arr_.size ())
43 for (int i=0; i < script_req_l_arr_.size(); i++)
45 Script_req* l=script_req_l_arr_[i];
46 Script *p =new Script;
48 p->specs_p_ = l->scriptdef_p_->clone ();
49 script_p_arr_.push (p);
50 announce_element (Score_element_info (p, l));
55 Script_engraver::do_pre_move_processing()
57 Staff_symbol* s_l = get_staff_info().staff_sym_l_;
58 for (int i=0; i < script_p_arr_.size(); i++)
60 Script*script_p = script_p_arr_[i];
61 if (!script_p->specs_p_->inside_b())
62 script_p->add_support (s_l);
64 if (script_p->specs_p_->is_type_b (Text_def::static_name ()))
66 Text_def * td_l = (Text_def*)script_p->specs_p_;
67 Scalar style = get_property ("textstyle");
70 td_l->style_str_= style;
72 Scalar alignment = get_property ("textalignment");
73 if (alignment.isnum_b())
75 td_l->align_dir_= (Direction)(int)alignment;
78 typeset_element (script_p);
80 script_p_arr_.clear();
84 Script_engraver::do_post_move_processing()
86 script_req_l_arr_.clear();
90 IMPLEMENT_IS_TYPE_B1(Script_engraver,Engraver);
91 ADD_THIS_TRANSLATOR(Script_engraver);